LINUX.ORG.RU

Яваскрипт и регэксп или «у нас все очень просто!»

 javascript regexp


0

1

Итак, дано:

a = "5:1:";
alert(a.match(/(\d+?):/g));
Out: ["5:", "1:"]

А теперь вопрос: с какого перепуга яваскрипт оставляет двоеточия в ответе?

И «на сладкое»: аналог на питоне выдает без двоеточия:

In [38]: a = "5:1:"
In [39]: r = re.compile("(\d+?):")
In [40]: r.findall(a)

Out[40]: ['5', '1']

P.S.: Я, блин, и на перле проверил - тоже без двоеточия! Подскажите кто знает: почему яваскрипт такой.... яваскрипт!

★★★

Последнее исправление: k0valenk0_igor (всего исправлений: 1)
Ответ на: комментарий от rogerw

дело в том, что match возвращает массив, первым элементом которого является полное совпадение - в данном случае «5:», а потом уже группи - «5»

Stribog
()
Ответ на: комментарий от Bad_ptr

Абсолютно аналогичный случай и у меня.

Отвечу так же как автор того поста «Кажись, работает. Но имх. странное, однако, поведение регекспов в этом JS. :)»

k0valenk0_igor ★★★
() автор топика
Ответ на: комментарий от Stribog

http://javascript.ru/String/match

Я всё понял.

Если же для регулярного выражения указан флаг «g», то метод возвращает массив, содержащий все совпадения.

Пример с глобальным поиском Скобки при таком поиске не учитываются.

Если вам нужен глобальный поиск с учетом скобок - используйте многократный вызов exec.

anonymous
()
Ответ на: комментарий от k0valenk0_igor

у тебя

a.match(/(\d+?):/g)
оставляет двоеточие
a.match(/(\d+?):/g)[1]
будет группа без двоеточий (обрати внимание, нам нужен первий елемент массива)

Stribog
()
Ответ на: комментарий от Stribog

будет группа без двоеточий

Не будет.

В случае применения флага «g» возвращается массив найденных значений без учета групп! И поэтому

a.match(/(\d+?):/g)[1] 

вернет второй элемент массива с двоеточием.

k0valenk0_igor ★★★
() автор топика
Последнее исправление: k0valenk0_igor (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.