Javascript Regexp Вопросительный знак кросс-браузерное поведение - PullRequest
0 голосов
/ 31 января 2012

Сегодня я возился с регулярными выражениями Javascript и узнал это:

//Suppose
var one = 'HELLOxBYE';
var two = 'HELLOBYE';

Вы можете создать регулярное выражение, которое пытается захватить 'x' двумя способами:

/^HELLO(x?)BYE$/ //(A)

//or

/^HELLO(x)?BYE$/ //(B)

Я обнаружил, что когда вы используете (A) для второй переменной, регулярное выражение возвращает пустую строку ''; в то время как при использовании (B) регулярное выражение возвращает ноль.

Вы должны быть осторожны с этим.

Кто-нибудь знает, является ли это кросс-браузерным поведением?

Я проверял это на Google Chrome (Webkit) build 15.

ОБНОВЛЕНИЕ: Ого, только что провёл несколько тестов в Internet Explorer 8, и он возвращает пустую строку '' для обоих случаев. Поэтому я пришел к выводу, что лучшая альтернатива - использовать (A), а затем проверить наличие пустой строки.

1 Ответ

2 голосов
/ 31 января 2012

Технически (A) должен возвращать '' на HELLOBYE, потому что скобки захвата могут захватывать как 'x', так и пустую строку, поскольку ? это внутри группы захвата.

В то время как в (B) скобки захвата могут только когда-либо захватывать строку x. Если x отсутствует, то группа вообще не захватывается , потому что вся группа является необязательной, в отличие от регулярного выражения в группа.

Тонкая разница!

Таким образом, браузер или механизм регулярных выражений будет всегда возвращать '' для (A), но то, что он возвращает для (B), не так хорошо определено, поэтому может отличаться в зависимости от реализации - Chrome различает между «группа соответствует пустой строке» и «группа не соответствует вообще». Принимая во внимание, что IE не делает это различие (или если он делает, он приводит тип возврата для второго случая в пустую строку).

Сводка - используйте (A), потому что вы знаете , что если нет x, то группа захвата определенно соответствует ''. Использование (B) зависит от того, различает ли браузер «совпадение нулевой длины» и «отсутствие совпадения вообще».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...