сравнить два значения различного типа (но идентичного базового типа)

Вы хотите динамически строить регулярное выражение, и для этого правильным решением является использование конструктора 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]"

0
задан octavio 27 March 2019 в 20:00
поделиться