无法使用 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 - 替换周围的备份,但不是内部字符串

如何使用Oracle中的SQL中的REGEXP_SUBSTR将自定义消息替换为空插槽

Oracle Regexp_replace 多次出现

jQuery:无法使用 RegExp 精确搜索“+3.00”或“-3.00”