正则表达式 - 重复负面字符类?

时间:2015-08-04 13:16:38

标签: javascript regex

简单地说,我有正则表达式:/[^0-9]+/gi

它不是作为字符串存储,而是作为JavaScript正则表达式存储。换句话说,没有引号。我的目的是返回一个由而不是位数字符组成的字符类数组。

我希望在给出代码/[^0-9]+/gi.exec("rgb(123, 124, 125);");

时返回此数组

但是,我只收到一个length: 1数组,其索引[0]"rgb("。为什么我没有得到包含);,等其他非数字的数组?

2 个答案:

答案 0 :(得分:5)

  

为什么我没有得到由其他非数字组成的数组

因为你错了。

"rgb(123, 124, 125);".match(/[^0-9]+/gi);

.exec()总是返回下一个匹配,直到没有更多匹配 - 它被设计为在循环中运行。

答案 1 :(得分:2)

您需要多次致电exec

  

如果匹配成功,exec()方法将返回一个数组并更新正则表达式对象的属性。返回的数组将匹配的文本作为第一个项目,然后匹配包含所捕获文本的每个捕获括号的一个项目。

     

如果你的正则表达式使用&#34; g&#34; flag,您可以多次使用exec()方法查找同一字符串中的连续匹配。执行此操作时,搜索从正则表达式lastIndex property test()指定的str子字符串开始(lastIndex也会提升MDN advises属性。)< / p>

&#13;
&#13;
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;
&#13;
&#13;

也许,因为目前的正则表达式match()确实更有效率,但展望未来,{{3}}:

  

如果您想获取捕获组并设置了全局标记,则需要使用RegExp.exec()

这就是为什么恕我直言exec是一种更灵活的方法。