使用正则表达式完全替换动态字符串,如果它嵌入在另一个字符串中,则不会

时间:2014-11-20 17:52:20

标签: javascript jquery regex

让我用一个例子向你解释我的问题:

var mainString = "at iteration";

var dynamicString = "at";   // coming from user input

现在,我想将[]添加到dynamicString,并使用这个新的dynamicString替换mainStringdynamicString的所有出现。

所以,我这样做:

mainString = mainString.replace(new RegExp(dynamicString,"g"), "[]" + dynamicString);

我的预期结果是:

[]at iteration

但我得到了:

[]at iter[]ation

这是因为at内有iteration

Javascript不允许执行以下操作:

new RegExp(/^dynamicString$/,"g") // where dynamicString is a variable

我有办法解决这个问题吗?

jsFiddle

2 个答案:

答案 0 :(得分:3)

您可以使用字边界,如下所示:

mainString = mainString.replace(new RegExp("\\b" + dynamicString + "\\b", "g"), 
     "[]" + dynamicString);

答案 1 :(得分:3)

您应该使用\b检查word boundaries。所以,你的正则表达式实例化看起来像

new RegExp("\\b" + dynamicString + "\\b","g")

单词边界是沿着这些行的空格,连字符,句点和其他东西。因此,在每个示例中,它将匹配at的第一个实例,但不匹配第二个

at iteration
at-iteration
.at.iteration

等等......