Вы хотите динамически строить регулярное выражение, и для этого правильным решением является использование конструктора new RegExp(string)
. Чтобы конструктор обрабатывал специальные символы буквально , вы должны избегать их. Существует встроенная функция в виджета автозаполнения jQuery UI , называемая $.ui.autocomplete.escapeRegex
:
[...] вы можете использовать встроенный
$.ui.autocomplete.escapeRegex
. Он возьмет один строковый аргумент и уберет все символы регулярных выражений, что сделает результат безопасным для перехода кnew RegExp()
.Если вы используете jQuery UI, вы можете использовать эту функцию или скопировать его определение из источника :
function escapeRegex(value) { return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ); }
И использовать его следующим образом:
"[z-a][z-a][z-a]".replace(new RegExp(escapeRegex("[z-a]"), "g"), "[a-z]"); // escapeRegex("[z-a]") -> "\[z\-a\]" // new RegExp(escapeRegex("[z-a]"), "g") -> /\[z\-a\]/g // end result -> "[a-z][a-z][a-z]"