2013-03-23 152 views
3

在JavaScript中,是否可以排除一個正則表達式的匹配(通過編寫另一個正則表達式)?例如,我想排除正則表達式的所有比賽從另一個正則表達式中排除一個正則表達式

/(cl|g|cr|d)(own)/(它匹配「小丑」,「禮服」,「皇冠」,「下」),從正則表達式

/(c|g|cl|cr|d)(o(w|u))(n|d)/(匹配「皇冠」,「小丑」,「禮服」,「塊」等)。

組合的正則表達式應匹配與第一個正則表達式匹配的所有字符串,但不匹配與第二個正則表達式匹配的字符串。

+0

下面的搜索結果給那些隱約與此相關的幾個問題一個,但我發現沒有確切的重複:https://www.google.com/#hl=zh-CN&sclient=psy-ab&q=javascript+exclude+word+from+regex&oq=javascript+exclude+word+from+&gs_l=hp。 3.1.33i29i30l4.685.8033.0.9497.45.36.8.1.1.1.342.3792.22j11j2j1.36.0 ... 0.0 ... 1c.1.7.psy-ab.mazWAc09N-S&PBX = 1&BAV = on.2,or.r_cp.r_qf。 &BVM = bv.44158598,d.dmQ &fp = d76eed8efe782f95&biw = 1366&bih = 639 – 2013-03-23 01:26:18

回答

4

好了,你可以寫這樣的:

/(?:cl|g|cr|d)o(?:un|wd)|co[wu][nd]/ 

但更通常,你可以使用負前瞻:

/(?!(?:cl|g|cr|d)own)(?:c|g|cl|cr|d)o[wu][nd]/ 
+0

我注意到這個正則表達式包含方括號以及括號(在兩個原始正則表達式中)。是否可以編寫不改變原始正則表達式語法的等效正則表達式? – 2013-03-23 01:28:24

+0

另外,在jsfiddle.net上發佈一個這樣的演示會很有用(這樣用戶可以從這裏測試這個函數)。 – 2013-03-23 01:34:33

+1

'[wu]'比'(w | u)'更高效。 – 2013-03-23 01:36:08