我有以下正则表达式:
(electric|acoustic) (guitar|drums)
我需要的是匹配:
electric guitar
electric drums
acoustic guitar
acoustic drums
electric
acoustic
guitar
drums
我试过用过?两组之后,但它匹配一切。谢谢!
编辑:
<script type="text/javascript">
var s = "electric drums";
if(s.match('^(?:electric()|acoustic())? ?(?:guitar()|drums())?(?:\1|\2|\3|\4)$')){
document.write("match");
} else {
document.write("no match"); // returns this
}
</script>
答案 0 :(得分:3)
一种方法是拼写出来:
^((electric|acoustic) (guitar|drums)|(electric|acoustic|guitar|drums))$
或(因为你不需要捕捉括号)
^(?:(?:electric|acoustic) (?:guitar|drums)|(?:electric|acoustic|guitar|drums))$
如果您不想重复自己,也可以使用技巧:
^(?:electric()|acoustic())? ?(?:guitar()|drums())?(?:\1|\2|\3|\4)$
(?:\1|\2|\3|\4)
确保至少有一个以前的空捕获组(()
)参与了比赛。
答案 1 :(得分:2)
使用这样的基于前瞻性的正则表达式:
(?=.*?(?:electric|acoustic|guitar|drums))^(?:electric|acoustic|) ?(?:guitar|drums|)$