Javascript正则表达式:以任何顺序匹配2个子串

时间:2015-10-04 20:00:34

标签: javascript regex

在阅读了如何在Javascript中编写正则表达式后,我仍然很困惑如何编写这个...

我希望以任何顺序匹配每个包含至少一个2个子串的字符串。

说sub1 =“foo”和sub2 =“bar”

foo =>

bar =>

foobar =>匹配

barfoo =>匹配

foohellobar =>匹配

有人可以帮我吗?

另外,我想排除另一个子字符串。因此,它将匹配包含2个子串的字符串,如前所述,但不包含sub3,无论其与其他2个的顺序如何。

非常感谢

3 个答案:

答案 0 :(得分:3)

您可以使用indexOf

str.indexOf(sub1) > -1 && str.indexOf(sub2) > -1

或ES6中的includes

str.includes(sub1) && str.includes(sub2)

或者如果你有一个子串数组:

[sub1, sub2/*, ...*/].every(sub => str.includes(sub));

答案 1 :(得分:1)

这将有效:

/.*foo.*bar|.*bar.*foo/g

.*匹配0个或多个字符(.匹配任何字符,*代表0或许多字符)

|是正则表达式或运算符

从regex101生成的代码:

var re = /.*foo.*bar|.*bar.*foo/g; var str ='foobar'; var m;

while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    // View your result using the m-variable.
    // eg m[0] etc.
}

DEMO

话虽如此,最好使用Oriol的answer indexOf()includes()

答案 2 :(得分:0)

我不会使用复杂的正则表达式,而只是使用逻辑操作数&&

var param = 'foobar'; 
alert(param.match(/foo/) && param.match(/bar/) && !param.match(/zoo/));

param = 'foobarzoo'; 
alert(param.match(/foo/) && param.match(/bar/) && !param.match(/zoo/));