简单地说,我有正则表达式:/[^0-9]+/gi
它不是作为字符串存储,而是作为JavaScript正则表达式存储。换句话说,没有引号。我的目的是返回一个由而不是位数字符组成的字符类数组。
我希望在给出代码/[^0-9]+/gi.exec("rgb(123, 124, 125);");
但是,我只收到一个length: 1
数组,其索引[0]
为"rgb("
。为什么我没有得到包含);
或,
等其他非数字的数组?
答案 0 :(得分:5)
为什么我没有得到由其他非数字组成的数组
因为你错了。
"rgb(123, 124, 125);".match(/[^0-9]+/gi);
.exec()
总是返回下一个匹配,直到没有更多匹配 - 它被设计为在循环中运行。
答案 1 :(得分:2)
您需要多次致电exec
:
如果匹配成功,
exec()
方法将返回一个数组并更新正则表达式对象的属性。返回的数组将匹配的文本作为第一个项目,然后匹配包含所捕获文本的每个捕获括号的一个项目。如果你的正则表达式使用" g" flag,您可以多次使用
exec()
方法查找同一字符串中的连续匹配。执行此操作时,搜索从正则表达式lastIndex
property test()指定的str
子字符串开始(lastIndex也会提升MDN advises属性。)< / p>
var re = /[^0-9]+/g;
var str = 'rgb(123, 124, 125);';
var m;
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
document.write(m[0] + "<br/>");
}
&#13;
也许,因为目前的正则表达式match()
确实更有效率,但展望未来,{{3}}:
如果您想获取捕获组并设置了全局标记,则需要使用
RegExp.exec()
。
这就是为什么恕我直言exec
是一种更灵活的方法。