Regex фиксирует последнее слово совпадения в группе - PullRequest
0 голосов
/ 10 января 2019

У меня есть простое регулярное выражение, например, _(([a-zA-Z]|_)*), чтобы соответствовать словам что угодно после подчеркивания, например, _price_range * _qty_val, слова catpure, которые я ищу price_range, qty_val, но для странной ошибки есть три подходящие группы, последняя одно из последних слов совпадающего слова, которое в моем случае e и l. Может кто-нибудь объяснить или разрешить мне, что я здесь не так делаю? Я не хочу последнюю подходящую группу.

Пожалуйста, проверьте скриншот. enter image description here

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Попробуйте это ( пример здесь )

_[^ *]*     or grouped     _([^ *]*)

let s = "_price_range * _qty_val"

let r = s.match(/_[^ *]*/g).slice(0).map(x=>x.substr(1));

console.log(r);
0 голосов
/ 10 января 2019

Неожиданная группа захвата - это группа 2, то есть внутренние скобки ([a-zA-Z]|_).

Простым решением было бы отключить захват этой группы:

_((?:[a-zA-Z]|_)*)

[a-zA-Z]|_ можно упростить до [a-zA-Z_], поэтому ваше регулярное выражение может быть таким:

_([a-zA-Z_]*)
...