Подтвердить что ты не робот

Различия между регулярными выражениями С# и JavaScript?

Являются ли разные регулярные выражения С# и JavaScript?

Есть ли список этих различий?

4b9b3361

Ответ 2

Здесь разница, с которой мы столкнулись, что я нигде не видел, так что я опубликую ее и решение, здесь, в надежде, что это поможет кому-то.

Мы тестировали "некоторые, но не все" классы символов, такие как "от A до Z, но не Q, V или X", используя синтаксис "[A-Z- [QVX]]". Не знаю, где мы его нашли, не знаю, зарегистрировано ли это, но работает в .Net.

Например, в Powershell, используя класс регулярных выражений .Net,

[regex]::ismatch("K", "^[A-Z-[QVX]]$") 

возвращает значение true. Тестирование одного и того же ввода и шаблона в JavaScript и возвращает false, но тест "K" против "^ [A-Z] $" в JavaScript и возвращает true.

Вы можете использовать более ортодоксальный подход отрицательного вида, чтобы выразить "от A до Z, но не Q, V или X", например "^ (?! [QVX]) [AZ] $", который будет работать как в Powershell и (современный) JavaScript.

Учитывая точку Бен Аткина выше, чем IE6 и IE7, не поддерживающие lookahead, может быть, единственный способ сделать это в дураковом (или IE7-доказательном) способе - расширить выражение, например "[AZ- [QVX]" → "ABCDEFGHIJKLMNOPRSTUWYZ". Уч.

Ответ 3

Я заметил, что теперь есть сравнение движков регулярных выражений в Википедии. Это всего лишь несколько таблиц информации на данный момент, но может быть полезно для кого-то: Сравнение механизмов регулярного выражения

Ответ 4

Во-первых, некоторые ресурсы:

Вот несколько отличий:

  • Lookahead не поддерживается в IE6 и IE7. (Найдите x(?=y) в руководстве MDC для примеров.)
  • JavaScript не поддерживает именованные группы захвата. Пример: (?<foo>)
  • Список метасимволов, поддерживаемых JavaScript, намного короче.