在阅读了如何在Javascript中编写正则表达式后,我仍然很困惑如何编写这个...
我希望以任何顺序匹配每个包含至少一个2个子串的字符串。
说sub1 =“foo”和sub2 =“bar”
foo =>
bar =>
foobar =>匹配
barfoo =>匹配
foohellobar =>匹配
有人可以帮我吗?
另外,我想排除另一个子字符串。因此,它将匹配包含2个子串的字符串,如前所述,但不包含sub3,无论其与其他2个的顺序如何。
非常感谢
答案 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.
}
话虽如此,最好使用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/));