09.07.2013, 17:47
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от lancer
|
В чем смысл "?", если возможность отсутствия элемента уже описана звездочкой.
|
Есть такое свойство, как жадность.. http://javascript.ru/tutorial/regexp-specials
т.есть жадность в /B.*A/ , может с размаху захватить первые A
хотя в данном паттерне "?" - не нужна, /посколь достаточно захватить любое из А
Последний раз редактировалось Deff, 09.07.2013 в 18:00.
|
|
09.07.2013, 22:21
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
Сообщение от Deff
|
т.есть жадность в /B.*A/ , может с размаху захватить первые A
хотя в данном паттерне "?" - не нужна, /посколь достаточно захватить любое из А
|
сомнительная экономия но при ? быстрее найдёт.
|
|
10.07.2013, 13:10
|
Профессор
|
|
Регистрация: 30.01.2008
Сообщений: 230
|
|
Пример замены открывающего тега.
text = '1 <A href="#">...</A> 2'
text = text.replace(/<A([^>]*)>/, 'TEST')
alert(text)
Зачем здесь применяется группировка при помощи круглых скобок, ведь звездочка действует только на один символ, который располагается перед ней, в данном случае на фигурные скобки.
|
|
10.07.2013, 13:12
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,112
|
|
это не один символ -- это всё кроме >
|
|
10.07.2013, 13:14
|
Профессор
|
|
Регистрация: 30.01.2008
Сообщений: 230
|
|
Сообщение от рони
|
это не один символ -- это всё кроме >
|
Знаю, но не суть, я имел ввиду на A она никак действовать не может, только на один символ или выражение в кдвадратных скобках слева от себя. На один символ/одно выражение в скобках, A под эту звездочку никак не попадает.
Поэтому вопрос про круглые скобки остается(он через один ответ выше).
Еще вопрос про то как жадность проявляется.
text = '1 <A href="#">...</A> 2'
text = text.replace(/<A([^>]*)>/, 'TEST')
alert(text)
Цитата:
|
При запуске вы увидите, что заменяется не открывающий тэг, а вся ссылка, выражение матчит ее от начала и до конца.
Это происходит из-за того, что точка-звездочка в "жадном" режиме пытается захватить как можно больше, в нашем случае - это как раз до последнего >.
|
Следуя какой-такой логике она пытается захватить как можно больше >, если выражение [^>], к которому она относится, не ищет >? Но получается в тоже время содержание > в этом выражении и есть причина жадности на символы >?
Последний раз редактировалось lancer, 10.07.2013 в 17:26.
|
|
10.07.2013, 17:23
|
Профессор
|
|
Регистрация: 30.01.2008
Сообщений: 230
|
|
Up
|
|
10.07.2013, 21:33
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от lancer
|
Внимательно прочел здесь статью регулярные выражения, нашел там, что "|" это "или", но не нашел ничего про "и".
|
это как, на одном месте одновременно и одно и другое что ли
в том и смысл, что на одном месте либо одно, либо другое
задачу опиши точнее
|
|
10.07.2013, 22:32
|
Аспирант
|
|
Регистрация: 29.05.2013
Сообщений: 71
|
|
Сообщение от lancer
|
Следуя какой-такой логике она пытается захватить как можно больше >, если выражение [^>], к которому она относится, не ищет >? Но получается в тоже время содержание > в этом выражении и есть причина жадности на символы >?
|
<[^>]*> аналогично <.*?> (ну с учетом особенностей точки)
Запись <[^>]*?> смысла не имеет.
Сообщение от lancer
|
Зачем здесь применяется группировка при помощи круглых скобок, ведь звездочка действует только на один символ, который располагается перед ней, в данном случае на фигурные скобки.
|
Скобки - это еще и выделение под-совпадений, которые вы можете использовать дальше в коде, или использовать в замене. Например, text.replace(/<A([^>]*)>/, '<TEST$1>')
|
|
11.07.2013, 14:14
|
Профессор
|
|
Регистрация: 30.01.2008
Сообщений: 230
|
|
Сообщение от bes
|
это как, на одном месте одновременно и одно и другое что ли
в том и смысл, что на одном месте либо одно, либо другое
задачу опиши точнее
|
В первом топике описана задача, там все предельно ясно, скорее всего невнимательно прочел. Она уже решена, спасибо Deff'y.
Сейчас остались вопросы начиная с этого поста про скобки.
В ответе MiksIr не вижу ответа на вопросы, про те скобки в том числе.
MiksIr ответил:
Цитата:
|
Скобки - это еще и выделение под-совпадений, которые вы можете использовать дальше в коде, или использовать в замене. Например, text.replace(/<A([^>]*)>/, '<TEST$1>')
|
Там дальше как раз таки ничего не используется и группировать на мой взгляд нечего, поэтому и спрашиваю.
Последний раз редактировалось lancer, 11.07.2013 в 14:17.
|
|
11.07.2013, 14:17
|
Аспирант
|
|
Регистрация: 29.05.2013
Сообщений: 71
|
|
Зануда. Конкретно по тому посту - скобки там не нужны.
|
|
|
|