Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярные выражения. Разница, если String и RegExp методы (https://javascript.ru/forum/misc/23433-regulyarnye-vyrazheniya-raznica-esli-string-i-regexp-metody.html)

jsuse 23.11.2011 13:59

Регулярные выражения. Разница, если String и RegExp методы
 
Есть такой пример в учебнике:

var reg = /[-()\.^]/g;

Первый случай. С методом match():
var str = "f.(g)-^1".match(reg);
alert(str);    //  .,(,),-,^

Выводит результат полностью. Формирует массив для всех совпадений.

Второй случай. С методом exec(). Чтобы увидеть все совпадения, нужно перечислять по очереди:
var a = re.exec("f(g)-.^1");
var b = re.exec("f(g)-.^1");
var c = re.exec("f(g)-.^1");
alert(a);   // (
alert(b);   // )
alert(c);   // -

и т.д. И в массив заносит только ОДИН результат - текущей проверки.

Но в справочнике указано, что exec() "формирует массив результатОВ или null". Не могу понять, где ошибка. Я проверил и у меня exec() НЕ формирует массив результатов. Формирует массив, но с ОДНИМ элементом. А не всеми, как match().
Вопрос, я неправильно вызываю? exec() может формировать массив со всеми результатами? или в справочнике все же ошибка?

trikadin 23.11.2011 15:44

Цитата:

Сообщение от jsuse
exec() "формирует массив результатОВ или null"

Массив результатов, всё верно. Фишка вот в чём:

alert(/H(el)/.exec("Hello").join("\n"));
// Первый элемент - вся найденная подстрока. Второй элемент - скобка.


Часовой пояс GMT +3, время: 22:05.