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|)$