Точная замена строки в 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`

Другие вопросы по тегам