如何保留多个正则表达式匹配的顺序?

时间:2014-03-03 09:46:08

标签: javascript regex

我想要的是在多行字符串中找到与不同正则表达式的多个匹配,如下所示:

word1
word2
word1
word1
word2
word1

有3个数组,一个包含所有匹配项,它们出现在字符串中(['word1','word2','word1'...]),另外两个包含所有单独的匹配(word1和word2)。最后两个很容易,但我坚持第一个。我能实现这一目标的最有效方法是什么?如果可能的话,我宁愿不测试字符串3次,但如果这就是我必须做的事情,这不是什么大问题。

1 个答案:

答案 0 :(得分:1)

一行一行,检查它是否与正则表达式匹配。然后,将它同时推送到相应的数组和集合数组。

http://jsfiddle.net/Pbyu6/

var regex = /foo\d|bar\d/g,
    str = "foo1\n\
bar1\n\
baz1\n\
foo2\n\
foo3\n\
bar2\n\
baz2\n\
foo4\n\
bar3\n\
foo5",
    a = string.split('\n'),
    foos = [],
    bars = [],
    both = [],
    s;

for (var i = 0; i < a.length; i++) {
    s = a[i];
    if (/foo/.test(s)) {
        foos.push(s);
        both.push(s);
    }
    else if (/bar/.test(s)) {
        bars.push(s);
        both.push(s);
    }
}