簡體   English   中英

在正則表達式中匹配第一組,第二組或兩者

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM