2014-12-03 67 views
0

我有一個單詞列表:正則表達式匹配2個字母分別

Sup 
Past 
P.S. Away 
Test 
Set 
Lapse 
Space 

現在,當我鍵入ps的,我需要匹配包含單詞「p」和「S」的一個出現的所有單詞。 所以輸出將是:

Sup 
Past 
P.S. Away 
Lapse 
Space 

的正則表達式的嘗試:

/ps/ // checks for ps as a combination 
/p{1}.s{1}/ // Selects the needful but not sup or space (s preceding p) 
+0

能否請您發表您自己編寫的中的代碼試圖解決這個問題。 SO是爲了幫助你用你寫的代碼解決問題,它不是一個代碼編寫服務。 – 2014-12-03 11:07:59

+0

羅裏 - 正在編輯添加試用解決方案 – zeetit 2014-12-03 11:10:19

回答

2

像這樣使用陽性看看aheads

/^(?=.*p)(?=.*s).*$/mi 

Regex Example

  • ^錨定字符串的開始處的正則表達式

  • (?=.*p)正面向前看。檢查字符串是否包含p

  • (?=.*s)正面向前看。如果檢查字符串包含s

  • .*匹配任何

  • $錨正則表達式在字符串

+0

非常感謝nu11p01n73R。已經掙扎了一個多小時。將探索這些類型的正則表達式模式,以瞭解更多關於這些 – zeetit 2014-12-03 11:15:37

+0

@ var17歡迎您隨時:)幫助 – nu11p01n73R 2014-12-03 11:16:54

1
^(?=.*p)(?=.*s)[a-z .]+$ 

嘗試this.See演示結束。

http://regex101.com/r/yR3mM3/33

var re = /^(?=.*p)(?=.*s)[a-z .]+$/gmi; 
var str = 'Sup\nPast\nP.S. Away\nTest\nSet\nLapse\nSpace'; 
var m; 

while ((m = re.exec(str)) != null) { 
if (m.index === re.lastIndex) { 
re.lastIndex++; 
} 
// View your result using the m-variable. 
// eg m[0] etc. 
} 
+0

非常感謝vks。工作很好 – zeetit 2014-12-03 11:23:04

+0

@ var17歡迎:) – vks 2014-12-03 11:23:34

1

使用正則表達式邏輯OR運算符|的另一種方法。

/^(?:.*p.*s.*|.*s.*p.*)$/mi 

OR

/^.*(?:p.*s|s.*p).*$/mi 

DEMO

+0

謝謝Avinash,但輸入字母(ps)的大小可能因用戶輸入而異。所以形成所有的排列可能有點麻煩。展望未來似乎是我的解決方案 – zeetit 2014-12-03 11:35:18

相關問題