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

Javascript не будет разделяться с использованием регулярного выражения

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

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

Не работает:

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

Работает:

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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


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

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

Ответ 2

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