Javascript не будет разделяться с помощью регулярных выражений - PullRequest
19 голосов
/ 01 мая 2009

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

Я пытался использовать регулярное выражение с lookahead с функцией javascript split. По какой-то причине он не разбивал строку, даже если он находит совпадение, когда я вызываю совпадение. Первоначально я думал, что проблема заключается в использовании lookahead в моем регулярном выражении. Вот упрощенный пример:

Не работает:

"aaaaBaaaa".split("(?=B).");

Работает:

"aaaaBaaaa".match("(?=B).");

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

"aaaaBaaaa".split(/(?=B)./);

Я подтвердил свою теорию следующим глупо выглядящим примером:

"aaaaaaaa(?=B).aaaaaaa".split("(?=B).");

Кто-нибудь еще считает странным, что функция match предполагает, что у вас есть регулярное выражение, а функция split - нет?

Ответы [ 2 ]

31 голосов
/ 01 мая 2009

String.split принимает в качестве первого параметра строку или регулярное выражение. Метод String.match принимает только регулярное выражение.

Я полагаю, что String.match будет пытаться работать с тем, что пропущено; поэтому, если вы передадите строку, она будет интерпретироваться как регулярное выражение. Метод String.split не может позволить себе такую ​​роскошь, потому что он может принимать регулярные выражения И строки; в этом случае было бы глупо предугадывать.


Редактировать : (Из: "JavaScript: Полное руководство")

String.match требует регулярного выражения для работы. Переданный аргумент должен быть объектом RegExp, который определяет образец для сопоставления. Если этот аргумент не является RegExp, он сначала преобразуется в единицу, передавая его конструктору RegExp().

3 голосов
/ 01 мая 2009

Если я правильно помню (и я мог быть здесь очень неправ), метод split был реализован в javascript до того, как механизм regex стал широко использоваться, поэтому он предположительно для обратной совместимости.

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