让我用一个例子向你解释我的问题:
var mainString = "at iteration";
var dynamicString = "at"; // coming from user input
现在,我想将[]
添加到dynamicString
,并使用这个新的dynamicString
替换mainString
中dynamicString
的所有出现。
所以,我这样做:
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
我有办法解决这个问题吗?
答案 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
等等......