[英]Match first group, second group or both in regex
我有以下正則表達式:
(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>
一種方法是拼出來:
^((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)
確保至少有一個先前的空捕獲組( ()
)參與了匹配。
使用這樣的前瞻性正則表達式:
(?=.*?(?:electric|acoustic|guitar|drums))^(?:electric|acoustic|) ?(?:guitar|drums|)$
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.