我想在javascript中创建一个函数,它接受两个参数:一个正则表达式对象和一个字符串 正则表达式最多只能有一个捕获组 如果有一个捕获组,它将返回$ 1,否则返回剩余的字符串;
所以myfunc("hello123", /\d+/)
将返回你好和
myfunc("hello123", /\w+(\d+)/)
将返回123
如何确定是否有捕获组?
答案 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
,依此类推。