Javascript 在正则表达式中匹配第一组、第二组或两者

Javascript 在正则表达式中匹配第一组、第二组或两者,javascript,regex,Javascript,Regex,我有以下正则表达式: (electric|acoustic) (guitar|drums) 我需要的是匹配: electric guitar electric drums acoustic guitar acoustic drums electric acoustic guitar drums 我试过用这个?在两组之后,但它匹配了所有东西。谢谢 编辑: var s=“电鼓”; 如果(s.match(“^(?:电的()

我有以下正则表达式:

   (electric|acoustic) (guitar|drums)
我需要的是匹配:

    electric guitar
    electric drums
    acoustic guitar
    acoustic drums
    electric 
    acoustic
    guitar 
    drums
我试过用这个?在两组之后,但它匹配了所有东西。谢谢

编辑:


var s=“电鼓”;
如果(s.match(“^(?:电的()|声的())?(?:吉他()|鼓())?(?:\1 |\2 |\3 |\4)$”){
文件。填写(“匹配”);
}否则{
document.write(“不匹配”);//返回此
}

一种方法是详细说明:

^((electric|acoustic) (guitar|drums)|(electric|acoustic|guitar|drums))$
或者(因为不需要捕捉括号)

如果你不想重复,你也可以使用一个技巧:

^(?:electric()|acoustic())? ?(?:guitar()|drums())?(?:\1|\2|\3|\4)$

(?:\1 |\2 |\3 |\4)
确保至少有一个以前的空捕获组(
()
)参与了匹配。

使用基于前瞻的正则表达式,如下所示:

(?=.*?(?:electric|acoustic|guitar|drums))^(?:electric|acoustic|) ?(?:guitar|drums|)$

此匹配取决于您如何进行匹配;我添加了锚,使其明确。使用匹配功能,它与“electric randomword”匹配。请检查编辑的答案或查看实况演示:我添加锚
^
$
以禁止像
'electric randomword'
这样的文本。
^(?:electric()|acoustic())? ?(?:guitar()|drums())?(?:\1|\2|\3|\4)$
(?=.*?(?:electric|acoustic|guitar|drums))^(?:electric|acoustic|) ?(?:guitar|drums|)$