使用正则表达式,有条件地用$ 1或空字符串替换

时间:2014-05-22 10:50:02

标签: javascript regex

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

所以myfunc("hello123", /\d+/)将返回你好和
myfunc("hello123", /\w+(\d+)/)将返回123

如何确定是否有捕获组?

2 个答案:

答案 0 :(得分:1)

您可以使用此功能:

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计算出正则表达式作为参数传递的匹配组数量。

答案 1 :(得分:1)

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