Javascript 使用regex,有条件地替换为$1或空字符串

Javascript 使用regex,有条件地替换为$1或空字符串,javascript,regex,Javascript,Regex,我想在javascript中创建一个函数,它接受两个参数:正则表达式对象和字符串。 正则表达式最多可以有一个捕获组。 如果有捕获组,则返回$1,否则返回剩余字符串 因此myfunc(“hello123”,/\d+/)将返回hello和 myfunc(“hello123”,/\w+(\d+/)应返回123 如何识别是否存在捕获组?您可以使用此功能: function myfunc(str, re) { m = str.match(re); if (m && m.leng

我想在javascript中创建一个函数,它接受两个参数:正则表达式对象和字符串。
正则表达式最多可以有一个捕获组。
如果有捕获组,则返回$1,否则返回剩余字符串

因此
myfunc(“hello123”,/\d+/)
将返回hello和
myfunc(“hello123”,/\w+(\d+/)
应返回123


如何识别是否存在捕获组?

您可以使用此功能:

function myfunc(str, re) {
   m = str.match(re);
   if (m && m.length == 2)
      return m[1];
   else
      return str.replace(m[0], '');
}
测试:

myfunc("hello123", /\d+/);
hello

myfunc("hello123", /\w+?(\d+)/)
123

PS:使用
m.length
计算作为参数传递的正则表达式中有多少个匹配组。

使用
match
时,如果模式根本无法匹配,则返回
null
。如果存在匹配项,则索引
0
处的字符串将是完全匹配项,而后续索引将包含捕获组。基本上,第一个捕获组将位于索引
1
处,依此类推。

在第一个示例中:
myfunc(“hello123”,/\d+/)将返回hello
。您将用零替换第二个参数并返回字符串。在第二个示例中:
myfunc(“hello123”,/\w+(\d+/)将返回123
您正在匹配并返回匹配[1]。必须有一个统一的行为来构建函数。有一个逻辑:如果正则表达式中有一个捕获组,它将返回$1,否则它将用给定的模式替换字符串。第一个示例:
myfunc(“hello123”,/\d+/)
,没有匹配的组,因此应删除与给定模式/\d+/匹配的字符串。第二个例子
myfunc(“hello123”,/\w+(\d+/)
,有一个匹配的组,所以我需要匹配的部分!在这种情况下失败:
myfunc(“hello”、/\w+?(\d+/)
它为这种情况返回
123
,这也是您的预期输出。