Как получить данные из групп в регулярном выражении?
let result = str.match(/()\s()\s()\s()\s()\s()\s()/g);
Например мы получаем с помощью подобного регулярного выражения совпадения по строкам с наличием семи значений в ней. У нас получается некий список. Вопрос, как взять из регулярного выражения определенную группу или их все? То есть скажем, что например требуется третье значение (группа) в полученной строке. Для понимания хватит примера с выводом в консоль.
Ответы (1 шт):
Автор решения: Qwertiy
→ Ссылка
При использовании флага g в match в массив вместо вместо групп попадают все совпадения:
console.log("abcade".match(/a(.)(.)/))
console.log("abcade".match(/a(.)(.)/g))
Сейчас в js добавлен метод matchAll, который возвращает итератор (не массив!) массивов с группами:
for (var match of "abcade".matchAll(/a(.)(.)/g)) {
console.log(match)
}
Для более старых браузеров можно было использовать replace как forEach:
"abcade".replace(/a(.)(.)/g, (m, a, b) => {
console.log(m, a, b)
})
Кстати, с именованными группами тоже работает:
for (var match of "abcade".matchAll(/a.(?<third>.)/g)) {
console.log("matchAll", match.groups.third)
}
"abcade".replace(/a.(?<third>.)/g, (m, g1, i, s, gs) => {
console.log("replace", gs.third)
})
"abcade".replace(/a.(?<third>.)/g, (...args) => {
var gs = args.pop()
console.log("replace (2)", gs.third)
})