У меня есть простое регулярное выражение, например, _(([a-zA-Z]|_)*)
чтобы соответствовать словам что-либо после подчеркивания, например, так: _price_range * _qty_val
, слова catpure, которые я ищу price_range, qty_val
но странно ошибка: есть три подходящие группы, последняя из которых - последние слова соответствующего слова, в моем случае это e
и l
. Может кто-нибудь объяснить или разрешить мне, что я здесь не так делаю? Я не хочу последнюю подходящую группу.
Пожалуйста, проверьте скриншот.
Неожиданная группа захвата - это группа 2, которая является внутренними скобками ([a-zA-Z]|_)
.
Простым решением было бы сделать эту группу не захватывающей:
_((?:[a-zA-Z]|_)*)
[a-zA-Z]|_
можно упростить до [a-zA-Z_]
, поэтому ваше регулярное выражение может быть таким:
_([a-zA-Z_]*)
Попробуйте это (пример здесь)
_[^ *]* or grouped _([^ *]*)
let s = "_price_range * _qty_val"
let r = s.match(/_[^ *]*/g).slice(0).map(x=>x.substr(1));
console.log(r);
_
? Затем используйте одну группу захвата,_([a-zA-Z_]+)