Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Аналог && в регулярных выражениях (https://javascript.ru/forum/misc/39699-analog-v-regulyarnykh-vyrazheniyakh.html)

Deff 09.07.2013 17:47

Цитата:

Сообщение от lancer
В чем смысл "?", если возможность отсутствия элемента уже описана звездочкой.

Есть такое свойство, как жадность.. http://javascript.ru/tutorial/regexp-specials
т.есть жадность в /B.*A/ , может с размаху захватить первые A
хотя в данном паттерне "?" - не нужна, /посколь достаточно захватить любое из А

рони 09.07.2013 22:21

Цитата:

Сообщение от Deff
т.есть жадность в /B.*A/ , может с размаху захватить первые A
хотя в данном паттерне "?" - не нужна, /посколь достаточно захватить любое из А

сомнительная экономия но при ? быстрее найдёт.

lancer 10.07.2013 13:10

Пример замены открывающего тега.

text = '1 <A href="#">...</A> 2'
text = text.replace(/<A([^>]*)>/, 'TEST')
alert(text)


Зачем здесь применяется группировка при помощи круглых скобок, ведь звездочка действует только на один символ, который располагается перед ней, в данном случае на фигурные скобки.

рони 10.07.2013 13:12

Цитата:

Сообщение от lancer
^>

это не один символ -- это всё кроме >

lancer 10.07.2013 13:14

Цитата:

Сообщение от рони (Сообщение 261545)
это не один символ -- это всё кроме >

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

Поэтому вопрос про круглые скобки остается(он через один ответ выше).


Еще вопрос про то как жадность проявляется.

text = '1 <A href="#">...</A> 2'
text = text.replace(/<A([^>]*)>/, 'TEST')
alert(text)

Цитата:

При запуске вы увидите, что заменяется не открывающий тэг, а вся ссылка, выражение матчит ее от начала и до конца.

Это происходит из-за того, что точка-звездочка в "жадном" режиме пытается захватить как можно больше, в нашем случае - это как раз до последнего >.
Следуя какой-такой логике она пытается захватить как можно больше >, если выражение [^>], к которому она относится, не ищет >? Но получается в тоже время содержание > в этом выражении и есть причина жадности на символы >?

lancer 10.07.2013 17:23

Up

bes 10.07.2013 21:33

Цитата:

Сообщение от lancer
Внимательно прочел здесь статью регулярные выражения, нашел там, что "|" это "или", но не нашел ничего про "и".

это как, на одном месте одновременно и одно и другое что ли
в том и смысл, что на одном месте либо одно, либо другое

задачу опиши точнее

MiksIr 10.07.2013 22:32

Цитата:

Сообщение от lancer
Следуя какой-такой логике она пытается захватить как можно больше >, если выражение [^>], к которому она относится, не ищет >? Но получается в тоже время содержание > в этом выражении и есть причина жадности на символы >?

<[^>]*> аналогично <.*?> (ну с учетом особенностей точки)
Запись <[^>]*?> смысла не имеет.

Цитата:

Сообщение от lancer
Зачем здесь применяется группировка при помощи круглых скобок, ведь звездочка действует только на один символ, который располагается перед ней, в данном случае на фигурные скобки.

Скобки - это еще и выделение под-совпадений, которые вы можете использовать дальше в коде, или использовать в замене. Например, text.replace(/<A([^>]*)>/, '<TEST$1>')

lancer 11.07.2013 14:14

Цитата:

Сообщение от bes (Сообщение 261669)
это как, на одном месте одновременно и одно и другое что ли
в том и смысл, что на одном месте либо одно, либо другое

задачу опиши точнее

В первом топике описана задача, там все предельно ясно, скорее всего невнимательно прочел. Она уже решена, спасибо Deff'y.

Сейчас остались вопросы начиная с этого поста про скобки.

В ответе MiksIr не вижу ответа на вопросы, про те скобки в том числе.

MiksIr ответил:
Цитата:

Скобки - это еще и выделение под-совпадений, которые вы можете использовать дальше в коде, или использовать в замене. Например, text.replace(/<A([^>]*)>/, '<TEST$1>')
Там дальше как раз таки ничего не используется и группировать на мой взгляд нечего, поэтому и спрашиваю.

MiksIr 11.07.2013 14:17

Зануда. Конкретно по тому посту - скобки там не нужны.


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