2013-03-23 121 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