Regex фиксирует последнее слово совпадения в группе

1

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

Пожалуйста, проверьте скриншот. Изображение 174551

  • 2
    Вы имели в виду совпадение любых 0+ букв или подчеркиваний после _ ? Затем используйте одну группу захвата, _([a-zA-Z_]+)
  • 0
    Это работает, вы можете указать на мою ошибку?
Показать ещё 1 комментарий
Теги:
regex-group

2 ответа

1
Лучший ответ

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

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

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

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

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

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

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

let s = "_price_range * _qty_val"

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

console.log(r);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню