2013-07-19 53 views
2

嗨,讓我們說我有這個字符串:JavaScript的正則表達式 - 的否定(:)

var text = "Jackie Chan | Jack Frost | Capt.Jack Sparrow" 

我要找到每一個/Jack/除了傑克弗羅斯特。

我可以很容易地通過使用?!做到這一點,但它不包括姓氏

text.match(/[^\s]*Jack[^\s]*(?!\sFrost)/g); 
// Result: ['Jackie', 'Capt.Jack'] 

// I want the result to be ['Jackie Chan', 'Capt.Jack Sparrow'] 

所以基本上,我需要的?:否定。有這樣的事嗎?

我不想做(?:Chan|Sparrow)因爲如果我添加另一個傑克,它不會匹配。

感謝

回答

2

只要繼續與lookeahead後匹配:

text.match(/\S*Jack\S*(?!\s+Frost)\s+\S+/g) 
+0

您好感謝它的工作原理。你能詳細說明最後一部分'(?!\ s + Frost)\ s + \ S +'嗎?沒有找到組時忽略了組(?)? – hrsetyono

+1

是的,lookeaheads是「零寬度」,它們不捕獲任何東西。 – georg