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请再次检查。我更新了答案,不删除空格。谢谢你指出错误