2013-03-23 4 views
3

В JavaScript можно исключить совпадения одного регулярного выражения (путем написания другого регулярного выражения)? Например, я хотел бы, чтобы исключить все матчи регулярного выраженияИсключить одно регулярное выражение из другого регулярного выражения

/(cl|g|cr|d)(own)/ (который соответствует «клоун», «платье», «корона» и «вниз»)

из регулярного выражения

/(c|g|cl|cr|d)(o(w|u))(n|d)/ (который соответствует «короне», «клоуну», «мантии», «коме» и т. Д.).

Объединенное регулярное выражение должно соответствовать всем строкам, которые соответствуют первому регулярному выражению, но не строкам, которые соответствуют второму регулярному выражению.

+0

Результат поиска Ниже дает несколько вопросов, которые нечетко связанные с этим один, но я не нашел точных дубликатов: https://www.google.com/#hl=ru&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-ы & = 1 PBX & БАВ = on.2, or.r_cp.r_qf. & BVM = bv.44158598, d.dmQ & fp = d76eed8efe782f95 & biw = 1366 & bih = 639 –

ответ

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

Я заметил, что это регулярное выражение содержит квадратные скобки, а также круглые скобки (внутри двух исходных регулярных выражений). Можно ли написать эквивалентное регулярное выражение, не изменяющее синтаксис исходных регулярных выражений? –

+0

Кроме того, было бы полезно разместить демонстрацию этого файла на jsfiddle.net (чтобы пользователи могли проверить эту функцию здесь). –

+1

'[wu]' более эффективен, чем '(w | u)'. –

Смежные вопросы