Точная замена строки в Javascript
hidValue="javaScript:java";
replaceStr = "java";
resultStr=hidValue.replace("/\b"+replaceStr+"\b/gi","");
resultStr по-прежнему содержит "javaScript:java"
Приведенный выше код не заменяет точную строку Java. Но когда я изменяю код и напрямую передаю значение java, он корректно заменяется, т.е.
hidValue="javaScript:java";
resultStr=hidValue.replace(/\bjava\b/gi,"");
resultStr содержит "javaScript:"
Итак, как мне передать переменную для замены функции, чтобы заменить только точное совпадение.
2 ответа
Функция замены не принимает строку в качестве первого аргумента, но является объектом RegExp. Вы не можете смешивать эти два. Чтобы создать объект RexExp из комбинированной строки, используйте соответствующий конструктор:
resultStr=hidValue.replace(new RegExp("\\b"+replaceStr+"\\b","gi"),"");
Обратите внимание на двойную обратную косую черту: вы хотите иметь обратную косую черту в своем регулярном выражении, но обратная косая черта также служит escape-символом в строке, поэтому вам придется удвоить ее.
Обратите внимание, что в одном случае вы передаете литерал регулярного выражения /\bjava\b/gi
, а в другой вы передаете строку "/\bjava\b/gi"
, При использовании строки в качестве шаблона, String.replace
будет искать эту строку, она не будет обрабатывать шаблон как регулярное выражение.
Если вам нужно создать регулярное выражение с использованием переменных, сделайте это так:
new RegExp("\\b" + replaceStr + "\\b", "gi")
Увидеть:
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace
`let msisdn = '5093240556699' let isdnWith = numb.msisdn.slice(8,11); let msisdnNew = msisdn.replace(isdnWith, 'XXX', 'gi');
показать 5093240556XXX`