У меня есть массив случайных символов (может быть что угодно). Мне удалось преобразовать их в регулярное выражение:

var regexMarkers = new RegExp(markers.toString().replace(/,/g, '|'), 'gi');

Что работает нормально. Проблема заключается в том, что массив случайных символов содержит специальные символы регулярного выражения, например: $ I следует рассматривать их как обычные символы.

Я нашел это: экранирование специальных символов RegExp но не могу применить к моей ситуации (я новичок, только изучаю Javascript).

Я пробовал это:

let newMarkers = regexMarkers.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");

Но я получаю сообщение об ошибке, что regexMarkers.replace не является функцией. Какие-либо предложения?

1
midsummer 23 Июл 2020 в 22:24

1 ответ

Лучший ответ

Чтобы экранировать любые специальные символы в регулярном выражении, вам просто нужно использовать перед ним escape-символ \. Это регулярное выражение, которое вы нашли, делает это, вам просто нужно использовать его в своей строке как таковой:

var regexMarkers = new RegExp(markers.toString().replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1").replace(/,/g, '|'), 'gi');

Все, что вы нашли регулярное выражение, - это сопоставляет эти специальные символы регулярного выражения и заменяет их на \$1, где $1 представляет соответствующий специальный символ.

Это делает эту строку кода немного длинной, поэтому ее не повредит разбить на несколько строк, но это должно решить вашу проблему в любом случае.

Вот мой собственный тест, чтобы убедиться, что он работает:

let markers = ['a', 'b', '$', 'c'];
var regexMarkers = new RegExp(markers.toString().replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1").replace(/,/g, '|'), 'gi');
console.log(regexMarkers);
//output: /a|b|\$|c/gi
0
Ethan Reiland 23 Июл 2020 в 19:43