无法使用 RegExp 替换
Posted
技术标签:
【中文标题】无法使用 RegExp 替换【英文标题】:Unable to replace using RegExp 【发布时间】:2021-02-12 14:38:48 【问题描述】:我正在尝试使用 RegExp 替换一组特定的字符串,但它没有替换。我正在尝试的正则表达式是
\@223(?:\D|'')\gm
要测试的字符串集是这些
@223 ->Replace 223 with #
@223+@33 ->Replace 223 with #
@22; ->Not Replace
@2234 ->Not Replace
@22234 ->Not Replace
@223@44 ->Replace 223 with #
【问题讨论】:
如果它以@223
开头,您是否将其更改为223 with #
?
你想用#
替换233
吗?
只要使用str = str.replace(/@223\b/, "#")
【参考方案1】:
您的正则表达式有两个问题:
-
你使用了错误的斜线,应该是
/@223(?:\D|'')/gm
。
非捕获组仍将包含在完整匹配中,因此您可能需要在 @223
部分周围添加括号并替换该组。
您可以在regex101.com 等服务中测试您的正则表达式。请注意,在该服务中,开始和结束斜线已经隐式包含在内。
【讨论】:
【参考方案2】:如果你这样做了:
var string = `
@223
@223+@33
@22;
@2234
@22234
@223@44
`;
regex = /(?<=@)(223)(?=\D)/g;
string = string.replace(regex, "#");
console.log(string);
输出:
@#
@#+@33
@22;
@2234
@22234
@#@44
解释:
(?<=@) : test if leaded by @ character.
(?=\D) : followed by any character except digit
【讨论】:
以上是关于无法使用 RegExp 替换的主要内容,如果未能解决你的问题,请参考以下文章
Postgres regexp_replace:无法用第一个捕获的组替换源文本
使用 postgres regexp_replace() 替换字符串中的整数
Oracle Regexp - 替换周围的备份,但不是内部字符串