Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Что означает выражение (?:x) (https://javascript.ru/forum/misc/49253-chto-oznachaet-vyrazhenie-x.html)

riva 04.08.2014 22:48

Что означает выражение (?:x)
 
Объясните на примере, что означает регулярное выражение (?:x)
Это взято из хелпа с этого форума и там написано следующее:
Находит x, но не запоминает найденное. Это называется "незапоминающие скобки". Найденная подстрока не сохраняется в массиве результатов и свойствах RegExp.Как и все скобки, объединяют находящееся в них в единый подпаттерн.

Aetae 04.08.2014 23:00

alert( 'ababcdcd'.match(/(?:ab)+(cd)+/) )

ixth 04.08.2014 23:04

Ты знаешь как работают скобки в регулярке, чуви? Так вот (?:) работает так же как скобки, но не создает дополнительную группу в результате. Т.е. /^\/request\/index(\.html)?/ => ['/request/index.html', '.html'], /^\/request\/index(?:\.html)?/ => ['/request/index.html'].

riva 04.08.2014 23:22

Цитата:

Сообщение от ixth
Ты знаешь как работают скобки в регулярке, чуви?

Из всех Ваших слов, я вижу только ЧУВИ)))) Вот на ЧУВАК, я бы ещё промолчал,
но... Ахахаха, я даже не знаю, как сказать... Не говорите мне так больше, пожалуйста!

Но возвращаясь к теме, спасибо Вам обоим! Мне кажется, что теперь я и это выражение понял и заодно мне стало ясно, как формируется результативный массив. Вот когда возвращается массив с совпавшей строкой и ещё какими-то элементами, то эти элементы и есть ( группы )! А если применить это выражение, то в массиве этой группы не будет! Я правильно понял?

ixth 05.08.2014 01:24

Цитата:

А если применить это выражение, то в массиве этой группы не будет!
Да, поэтому оно называется non-matching group. Группировка есть, в матч не попадает.



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