Являются ли разные регулярные выражения С# и JavaScript?
Есть ли список этих различий?
Являются ли разные регулярные выражения С# и JavaScript?
Есть ли список этих различий?
Если бы существовал какой-либо веб-сайт, который мог бы дать ответ, это было бы www.regular-expressions.info
Здесь разница, с которой мы столкнулись, что я нигде не видел, так что я опубликую ее и решение, здесь, в надежде, что это поможет кому-то.
Мы тестировали "некоторые, но не все" классы символов, такие как "от 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". Уч.
Я заметил, что теперь есть сравнение движков регулярных выражений в Википедии. Это всего лишь несколько таблиц информации на данный момент, но может быть полезно для кого-то: Сравнение механизмов регулярного выражения
Во-первых, некоторые ресурсы:
Вот несколько отличий:
x(?=y)
в руководстве MDC для примеров.)(?<foo>)