regex группа не работает
Так работает
\??&{0,2}?lang=\w+?&{0,2}$|lang=\w+&{0,2}
\??&{0,2}?(lang=)\w+?&{0,2}$|\1\w+&{0,2}
Ответы (1 шт):
Автор решения: vsemozhebuty
→ Ссылка
Если вы используете скобки и обратную ссылку по разные стороны знака альтернативного выбора, всё начинает работать не совсем очевидным образом.
Даже если в первой части альтернативы находится соответствие, вторая часть как бы забывает соответствие и его часть в скобках, так что обратная ссылка будет ссылаться на пустую строку и не будет включать ожидаемую часть, даже если она есть (и будет срабатывать, даже если её нет).
> 'abca'.match(/(a)b|c\1/g)
[ 'ab', 'c' ]
> 'abc'.match(/(a)b|c\1/g)
[ 'ab', 'c' ]
Если первая часть альтернативы не найдена, происходит то же самое: обратная ссылка ссылается на пустую строку и всегда будет срабатывать независимо от того, что идёт на месте ожидаемой части (и есть ли там вообще что-то:
> 'abcb'.match(/(a)a|c\1/g)
[ 'c' ]
> 'abc'.match(/(a)a|c\1/g)
[ 'c' ]