Что делать?: Делать в regex
У меня есть регулярное выражение, похожее на это
/^(?:\w+\s)*(\w+)$*/
Что такое ?:
?
Ответы
Ответ 1
Это означает, что подшаблон является не-захватным подшаблоном. Это означает, что все, что соответствует в (?:\w+\s)
, даже если оно заключено в ()
, оно не будет отображаться в списке совпадений, только (\w+)
будет.
Вы по-прежнему ищете конкретный шаблон (в данном случае один символ пробела, по крайней мере, одно слово), но вам все равно, что на самом деле соответствует.
Ответ 2
В дополнение к превосходным ответам, его полезность также упрощает код, необходимый для извлечения групп из согласованных результатов. Например, ваша группа (\ w +) известна как группа 1, не заботясь о каких-либо группах, которые появляются перед ней. Это может улучшить ремонтопригодность вашего кода.
Ответ 3
Это означает только группа, но не помнит сгруппированную часть.
По умолчанию (
)
сообщает движку regex запомнить часть строки, которая соответствует шаблону между ним. Но иногда мы просто хотим сгруппировать шаблон без запуска памяти регулярных выражений, чтобы мы использовали (?:
вместо (