匹配两个字符串的Javascript正则表达式

Env*_*nve 9 javascript regex

我不明白那么多正则表达式,我想创建一个匹配两个字符串的表达式.

我知道对于一个字符串,代码是.match(/something/),如果匹配两个字符串.match(/something|someotherthing/)

如何编写仅在文本中找到两个字符串时才匹配的文件,例如"google microsoft"

Pau*_*aul 17

要使用单个正则表达式执行此操作,您需要考虑它们可以按任意顺序排列的事实.(.*匹配两个子串之间的任何字符):

/google.*microsoft|microsoft.*google/
Run Code Online (Sandbox Code Playgroud)

注意:如果您想要执行2个以上的子串,这将失控.3个字符串可以有6不同的顺序,5个字符串可以120订单,10个子字符串可以以3628800不同的方式排序!这就是为什么使用语言(Javascript)本身的功能,比如Explosion Pills的答案,可能比尝试用正则表达式做太多好.


Mar*_*der 9

其他答案对于你的具体问题完全没问题,但正如Paulpro所指出的那样,当你有两个以上的单词时,真的会失控.

最简单的方法是使用Explosion Pills建议的多次检查.

但是对于更具可扩展性的正则表达式方法,您可以使用前瞻:

/^(?=.*google)(?=.*microsoft)(?=.*apple).../
Run Code Online (Sandbox Code Playgroud)

前瞻实际上并没有消耗任何东西,所以在检查了第一个条件(.*google可以匹配)之后,你回到了字符串的开头并且可以检查下一个条件.如果所有前瞻都是这样,那么该模式才会通过.

请注意,如果您的输入可能包含换行符,.*则不会.你必须使用[^]*[\s\S]*代替(其他人的答案也一样).


Exp*_*lls 8

你可以使用.match两次

str.match(/google/) && str.match(/microsoft/)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,使用起来可能更快 .indexOf

您还可以使用详细的正则表达式

.match(/google.*microsoft|microsoft.*google/)
Run Code Online (Sandbox Code Playgroud)