Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 09.07.2013, 17:47
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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

Последний раз редактировалось Deff, 09.07.2013 в 18:00.
Ответить с цитированием
  #12 (permalink)  
Старый 09.07.2013, 22:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Сообщение от Deff
т.есть жадность в /B.*A/ , может с размаху захватить первые A
хотя в данном паттерне "?" - не нужна, /посколь достаточно захватить любое из А
сомнительная экономия но при ? быстрее найдёт.
Ответить с цитированием
  #13 (permalink)  
Старый 10.07.2013, 13:10
Профессор
Отправить личное сообщение для lancer Посмотреть профиль Найти все сообщения от lancer
 
Регистрация: 30.01.2008
Сообщений: 230

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

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


Зачем здесь применяется группировка при помощи круглых скобок, ведь звездочка действует только на один символ, который располагается перед ней, в данном случае на фигурные скобки.
Ответить с цитированием
  #14 (permalink)  
Старый 10.07.2013, 13:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Сообщение от lancer
^>
это не один символ -- это всё кроме >
Ответить с цитированием
  #15 (permalink)  
Старый 10.07.2013, 13:14
Профессор
Отправить личное сообщение для lancer Посмотреть профиль Найти все сообщения от lancer
 
Регистрация: 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.
Ответить с цитированием
  #16 (permalink)  
Старый 10.07.2013, 17:23
Профессор
Отправить личное сообщение для lancer Посмотреть профиль Найти все сообщения от lancer
 
Регистрация: 30.01.2008
Сообщений: 230

Up
Ответить с цитированием
  #17 (permalink)  
Старый 10.07.2013, 21:33
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

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

задачу опиши точнее
Ответить с цитированием
  #18 (permalink)  
Старый 10.07.2013, 22:32
Аспирант
Отправить личное сообщение для MiksIr Посмотреть профиль Найти все сообщения от MiksIr
 
Регистрация: 29.05.2013
Сообщений: 71

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

Сообщение от lancer
Зачем здесь применяется группировка при помощи круглых скобок, ведь звездочка действует только на один символ, который располагается перед ней, в данном случае на фигурные скобки.
Скобки - это еще и выделение под-совпадений, которые вы можете использовать дальше в коде, или использовать в замене. Например, text.replace(/<A([^>]*)>/, '<TEST$1>')
Ответить с цитированием
  #19 (permalink)  
Старый 11.07.2013, 14:14
Профессор
Отправить личное сообщение для lancer Посмотреть профиль Найти все сообщения от lancer
 
Регистрация: 30.01.2008
Сообщений: 230

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

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

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

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

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

Последний раз редактировалось lancer, 11.07.2013 в 14:17.
Ответить с цитированием
  #20 (permalink)  
Старый 11.07.2013, 14:17
Аспирант
Отправить личное сообщение для MiksIr Посмотреть профиль Найти все сообщения от MiksIr
 
Регистрация: 29.05.2013
Сообщений: 71

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кирилица в регулярных выражениях Ганж Общие вопросы Javascript 22 27.12.2012 01:58
как в регулярных выражениях написать неразрывной пробел? qwertyuiop Общие вопросы Javascript 6 03.08.2011 04:36
многострочный поиск в регулярных выражениях smollvrn Общие вопросы Javascript 9 24.02.2011 09:29
Помогите с позиционными проверки в регулярных выражениях Papa Серверные языки и технологии 4 23.05.2010 20:41
Экранирование квадратных скобок в регулярных выражениях Holod Я не знаю javascript 3 27.05.2009 22:52