JavaScript正则表达式替换整个单词

JavaScript正则表达式替换整个单词,javascript,regex,Javascript,Regex,我有一个变量: var str = "@devtest11 @devtest1"; 我使用这种方式将@devtest1替换为另一个字符串: str.replace(new RegExp('@devtest1', 'g'), "aaaa") 然而,它的结果(aaaa1 aaaa)并不是我所期望的。预期结果是:@devtest11 aaaa。我只想替换整个单词@devtest1 我如何才能做到这一点?使用\b零宽度字边界断言 var str = "@devtest11 @devtest1"; s

我有一个变量:

var str = "@devtest11 @devtest1";
我使用这种方式将
@devtest1
替换为另一个字符串:

str.replace(new RegExp('@devtest1', 'g'), "aaaa")
然而,它的结果(
aaaa1 aaaa
)并不是我所期望的。预期结果是:
@devtest11 aaaa
。我只想替换整个单词
@devtest1


我如何才能做到这一点?

使用
\b
零宽度字边界断言

var str = "@devtest11 @devtest1";
str.replace(/@devtest1\b/g, "aaaa");
// => @devtest11 aaaa
如果您还需要防止匹配案例,如
hello@devtest1
,您可以执行以下操作:

var str = "@devtest1 @devtest11 @devtest1 hello@devtest1";
str.replace(/( |^)@devtest1\b/g, "$1aaaa");
// => @devtest11 aaaa

使用单词边界
\b
将搜索限制为单词

因为
@
是特殊字符,所以需要在单词之外匹配它

由于
\b
不包含特殊字符,因此
\b
在单词边界处断言位置
(^\w | \w$|\w\w | \w\w)

var str=“@devtest11@devtest1”;
str=str.replace(/@devtest1\b/g,“aaaa”);

文件编写(str)
\b
如果单词被非空格字符包围,则无法正常工作。我建议使用以下方法

var output=str.replace('(\s|^)@devtest1(?=\s|$)','$1aaaa');

\b的开头有点棘手,想象一下:
“!!@devtest1”
的输入和
/\b@devtest1\b/
。“!”和“@”之间没有单词边界。(也就是说,单词边界的定义是明确的,但并不总是合适的。)展示你的尝试。(正如@user2864740所说,它在一开始就不起作用;但这不是问题中的示例遇到的问题。)@user2864740那么我该怎么做呢?“未成功”是一个无用的bug报告。如果您有一个失败的测试用例,请报告它,以及发生了什么。这也将匹配
hello@devtest1
这不是op所期望的
\b
@
devtest1
之间的
是无用的,因为它总是匹配的(邻域是常量)。
@\bd
有点无用;它相当于
@d
。将
\b
放在
@
之前也有问题。。但是对于播种的数据可以省略它。这也将匹配
hello@devtest1
@Anirudha检查另一个解决方案,现在它wont@Anirudha请再次检查。我更新了答案,不删除空格。谢谢你指出错误