无法使用RegExp更换

问题描述

我正在尝试使用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 #

解决方法

如果这是你的追求:

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
,

您的正则表达式有两个问题:

  1. 您使用了错误的斜杠,应该为/@223(?:\D|'')/gm
  2. 非捕获组仍将包含在完全匹配项中,因此您可能需要仅在@223部分周围加上括号,并替换该组。

您可以在regex101.com之类的服务中测试您的正则表达式。请注意,在该服务中,开始斜杠和结束斜杠已经隐含。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...