Точная замена строки в Javascript - PullRequest
1 голос
/ 01 декабря 2010
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 ]

3 голосов
/ 01 декабря 2010

Функция замены не принимает строку в качестве первого аргумента, но является объектом RegExp.Вы не можете смешивать эти два.Чтобы создать RexExp-объект из комбинированной строки, используйте соответствующий конструктор:

resultStr=hidValue.replace(new RegExp("\\b"+replaceStr+"\\b","gi"),"");

Обратите внимание на двойной обратный слеш: вы хотите иметь обратный слеш в своем регулярном выражении, но обратный слеш также служит в качестве escape-символастрока, так что вам придется удвоить ее.

3 голосов
/ 01 декабря 2010

Обратите внимание, что в одном случае вы передаете литерал регулярного выражения /\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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...