Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   регулярки: замена ссылки на ютуб (https://javascript.ru/forum/misc/30183-regulyarki-zamena-ssylki-na-yutub.html)

Hekumok 31.07.2012 22:10

/(.+)(?=\1*,\1+$)/

это значит - получаем символы (кроме пробела), за которыми следует такое же количество символов нуль или более раз, затем идет запятая, затем следует опять то количество символов один или несколько раз, которые находятся в конце входных данных))) Я понятно обьяснил?

Dim@ 31.07.2012 22:13

Hekumok,
неа,
Цитата:

это значит - получаем символы (кроме пробела), за которыми следует такое же количество символов нуль или более раз, затем идет запятая,
это я понял это и есть (.+)(\1*,) а конец как то ты странно объяснил ;)

oneguy 31.07.2012 22:16

Dim@, я постараюсь объяснить. Вы понимаете как работают обратные ссылки? Они ловят ту же подстроку, которая была поймана в захватывающие скобки с указанным порядковым номером.
/
  (.+) // ловит несколько звёдочек (допустим, n)
  (?=\1* // количество звёздочек, кратное n, \1 ловит ту же подстроку, которая была захвачена в (.+)
  , //символ запятая
  \1+ //количество звёздочек, кратное n
  $ //конец входящей строки
/

Следовательно, поиск удаётся только когда n является общим делителем количества звёздочек слева и справа от запятой. Поскольку использовался жадный квантификатор, то интерпретатор остановился на наибольшем общем делителе указанных чисел.
(.+) действительно вначале проверяет всю входящую строку, но дальше поиск не удаётся, поэтому постепенно сокращает количество в квантификаторе.

Hekumok 31.07.2012 22:19

Цитата:

Сообщение от Dim@ (Сообщение 193359)
в общем я то думал что хорошо знаю реги (они мне в отличии от других людей быстро и понятно давались

Как по мне, то ничего сложного в регах нет...прочитал про нихэту и эту статью - ничего сложного не увидел...вот хотел потренироваться на них...

Deff 31.07.2012 22:22

oneguy,
Хотя с точки зрения скоростной оптимальности- это лишь кубик рубик интелекта
при больших числах наверняка - ток массивы и циклы ?

Dim@ 31.07.2012 22:24

oneguy,
Цитата:

Вы понимаете как работают обратные ссылки?
Да и часто ими пользовался в регах
oneguy,
спасибо :dance:

oneguy 31.07.2012 22:26

Цитата:

Сообщение от Deff
oneguy,
Хотя с точки зрения скоростной оптимальности- это лишь кубик рубик интелекта
при больших числах наверняка - ток массивы и циклы ?

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

Deff 31.07.2012 22:27

Цитата:

Сообщение от oneguy
Наибольший общий делитель нужно считать алгоритмом Евклида.

Спс

Hekumok 31.07.2012 22:34

Цитата:

Сообщение от oneguy (Сообщение 193378)
Dim@, я постараюсь объяснить. Вы понимаете как работают обратные ссылки? Они ловят ту же подстроку, которая была поймана в захватывающие скобки с указанным порядковым номером.
/
  (.+) // ловит несколько звёдочек (допустим, n)
  (?=\1* // количество звёздочек, кратное n, \1 ловит ту же подстроку, которая была захвачена в (.+)
  , //символ запятая
  \1+ //количество звёздочек, кратное n
  $ //конец входящей строки
/

Следовательно, поиск удаётся только когда n является общим делителем количества звёздочек слева и справа от запятой. Поскольку использовался жадный квантификатор, то интерпретатор остановился на наибольшем общем делителе указанных чисел.
(.+) действительно вначале проверяет всю входящую строку, но дальше поиск не удаётся, поэтому постепенно сокращает количество в квантификаторе.

Во, oneguy вабще отлично объяснил)))

Dim@ 31.07.2012 22:40

oneguy,
интересно мне почему он ищет кратное n, а не общее наибольшое n?:blink:


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