2012-12-06 54 views
4

我有以下的正則表達式:賽第一組,無論是在第二組或正則表達式

(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> 

回答

2

使用這樣的前瞻基於正則表達式:

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

Live Demo

+0

使用匹配功能它匹配'電隨機字' – Kristian

+0

請檢查編輯的答案或查看現場演示:http://www.rubular.com/r/egHxmYpJ61我添加了錨點'^'和'$'來禁止「電子隨機字」這樣的文本。 – anubhava

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)確保至少有一個前面的空捕獲組(())參與了匹配。

+0

這款電動randomword – Kristian

+0

這取決於你怎麼做匹配的匹配;我已經添加了錨點來明確說明。 –

+0

我更新了我的帖子,不確定我是否使用正確的方法 – Kristian

相關問題