Javascript正则表达式:忽略中间的任何内容?

Javascript正则表达式:忽略中间的任何内容?,javascript,regex,Javascript,Regex,如何使用Javascript正则表达式忽略两者之间的任何内容 例如,我想检测这三个词:你是如何按照这个顺序进行的 我的正则表达式: var pattern = /([how]+[are]+[you]+)/i; pattern.test("howare"); //false <--- expected (correct) pattern.test("areyou"); //false <--- expected (correct) pattern.test("howareyou");

如何使用Javascript正则表达式忽略两者之间的任何内容

例如,我想检测这三个词:
你是如何按照这个顺序进行的

我的正则表达式:

var pattern = /([how]+[are]+[you]+)/i;

pattern.test("howare"); //false <--- expected (correct)
pattern.test("areyou"); //false <--- expected (correct)
pattern.test("howareyou"); //true <--- expected (correct)
pattern.test(" howareyou! "); //true <--- expected (correct)
pattern.test("how are  you"); //false <--- this should match!
pattern.test("how areyou  "); //false <--- this should match!
var模式=/([how]+[are]+[you]+)/i;

模式测试(“howare”)//false您只需要使用

.* // 0 or more of any character
默认情况下,正则表达式规则是贪婪的,因此尝试匹配
are
将优先于
*

然而,要注意,你需要去掉方括号,因为它们目前允许不应该匹配的东西。例如,它们允许
hoooowareyou
匹配,因为方括号允许所有给定字符,而
+
表示1个或多个字符

尝试以下方法:

how.*are.*you

现在还不清楚您是否希望所有测试用例都通过,如果您想通过,那么下面是这个答案的一个示例,您可以使用这个正则表达式:

how.*?are.*?you
这将确保如何如何以相同的顺序出现,并忽略其间的任何字符。因此,它将返回一个与
howwww-areee!#%@!$%$的匹配项您?
等。使用下面的演示链接查看更多正面和负面案例:


演示:

如果您感到困惑,我很抱歉。现在编辑一下这个问题。
注意,你不需要方括号。
->不仅不需要方括号,它们还会造成伤害(与OP pattern
hay
匹配)@SebastianProske是的。我将修改我的答案,使之成为现实clearer@Aaron,no
*
不是懒惰的…除非特定语言的实现工作方式不同。默认情况下,我使用/看到的每一种语言都是贪婪的。@Aaron不,它们是贪婪的,但如果需要,可以回溯以匹配。因此,第一个
*
将匹配字符串的结尾,然后回溯,直到
are
可以匹配为止。如果您混淆了,我很抱歉。现在编辑了一点问题。但它也确保了
然而
兔子
,和
bayou
都存在。您可以添加它,但如果您的目标只是确保这三个单词在给定的单词中存在,那么就没有必要了,因为在末尾添加它将使它与
您之后的任何字符匹配,例如
howareyou1234
将在匹配中也选择所有1234,分享一些我如何避免将来犯同样错误的见解如何?谢谢@塞巴斯蒂安·普罗斯克哇,完全没有抓住这一点。好球:)。因此,它不会匹配任何东西,因为它位于末尾。但它在开始时的行为方式不一样(像这样
*?how.*?are
),是吗?如果您感到困惑,我很抱歉。现在稍微修改一下这个问题。这确实有助于澄清(尽管我在回答中假设情况就是这样)。