Javascript正则表达式:按任意顺序匹配2个子字符串

Javascript正则表达式:按任意顺序匹配2个子字符串,javascript,regex,Javascript,Regex,在阅读了如何用Javascript编写regexp之后,我仍然很困惑如何编写这个 我希望以任意顺序匹配至少包含一个2个子字符串出现的每个字符串 说sub1=“foo”和sub2=“bar” foo=>不匹配 bar=>不匹配 foobar=>匹配项 barfoo=>匹配项 foohellobar=>匹配项 有人能帮我吗 另外,我想排除另一个子字符串。因此,它将像前面一样匹配包含2个子字符串的字符串,但不包含sub3,而不管它与其他2个子字符串的顺序如何 非常感谢这将起作用: /.*foo.*ba

在阅读了如何用Javascript编写regexp之后,我仍然很困惑如何编写这个

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

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

foo=>不匹配

bar=>不匹配

foobar=>匹配项

barfoo=>匹配项

foohellobar=>匹配项

有人能帮我吗

另外,我想排除另一个子字符串。因此,它将像前面一样匹配包含2个子字符串的字符串,但不包含sub3,而不管它与其他2个子字符串的顺序如何

非常感谢

这将起作用:

/.*foo.*bar|.*bar.*foo/g
*
匹配0个或多个字符(其中
匹配任何字符,
*
表示0个或多个字符)

|
是正则表达式还是运算符

从regex101生成的代码:

变量re=/.*foo.*bar.*bar.*foo/g; var str='foobar'; var-m

也就是说,最好使用Oriol的使用
indexOf()
includes()

这将起作用:

/.*foo.*bar|.*bar.*foo/g
*
匹配0个或多个字符(其中
匹配任何字符,
*
表示0个或多个字符)

|
是正则表达式还是运算符

从regex101生成的代码:

变量re=/.*foo.*bar.*bar.*foo/g; var str='foobar'; var-m

也就是说,最好使用Oriol的使用
indexOf()
includes()

您可以使用:

str.indexOf(sub1)>-1&&str.indexOf(sub2)>-1
或在ES6中:

str.includes(sub1)和&str.includes(sub2)
或者,如果您有一个子字符串数组:

[sub1,sub2/*,…*/];
您可以使用:

str.indexOf(sub1)>-1&&str.indexOf(sub2)>-1
或在ES6中:

str.includes(sub1)和&str.includes(sub2)
或者,如果您有一个子字符串数组:

[sub1,sub2/*,…*/];

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

var param='foobar';
警报(参数匹配(/foo/)&参数匹配(/bar/)&参数匹配(/zoo/);
param='foobarzoo';

警报(参数匹配(/foo/)&参数匹配(/bar/)&参数匹配(/zoo/)我不会使用复杂的正则表达式,而是使用逻辑操作数
&

var param='foobar';
警报(参数匹配(/foo/)&参数匹配(/bar/)&参数匹配(/zoo/);
param='foobarzoo';

警报(参数匹配(/foo/)&参数匹配(/bar/)&参数匹配(/zoo/)但是。。一个匹配不是比几个indexOf快吗?@mens但子字符串检查可能比正则表达式匹配快。正则表达式更为复杂,但是。。一个匹配不是比几个indexOf快吗?@mens但子字符串检查可能比正则表达式匹配快。正则表达式更复杂。为什么使用indexOf更好?我认为单次匹配会更快。我认为性能差异不明显,但indexOf更具可读性@为什么使用indexOf更好?我认为单次匹配会更快。我认为性能差异不明显,但indexOf更具可读性@男人