У меня есть массив случайных символов (может быть что угодно). Мне удалось преобразовать их в регулярное выражение:
var regexMarkers = new RegExp(markers.toString().replace(/,/g, '|'), 'gi');
Что работает нормально. Проблема заключается в том, что массив случайных символов содержит специальные символы регулярного выражения, например: $ I следует рассматривать их как обычные символы.
Я нашел это: экранирование специальных символов RegExp но не могу применить к моей ситуации (я новичок, только изучаю Javascript).
Я пробовал это:
let newMarkers = regexMarkers.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
Но я получаю сообщение об ошибке, что regexMarkers.replace не является функцией. Какие-либо предложения?
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
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.