Regex для группировки рекурсивного шаблона в строке и возврата группы захвата в виде массива - PullRequest
1 голос
/ 20 апреля 2020

У меня есть строка, которая выглядит следующим образом: Hello:A1,A3,A4,AA04

Сейчас у меня есть запрос регулярного выражения, который выглядит следующим образом:

/(?<g1>[A-Za-z]+):(?<g2>[A-Za-z0-9,]+)/

Когда совпадение найдено, я могу получить доступ это так:

"Hello:A1,A3,A4,AA04".match(/(?<g1>[A-Za-z]+):(?<g2>[A-Za-z0-9,]+)/).groups.g1 // outputs: Hello

ок ... теперь у меня тоже есть g2. Мне нужно g2 в массиве с отсутствующим ,. Прямо сейчас в моем коде я сделал это следующим образом:

"Hello:A1,A3,A4,AA04".match(/(?<g1>[A-Za-z]+):(?<g2>[A-Za-z0-9,]+)/).groups.g2.split(',') // outputs: [ 'A1', 'A3', 'A4', 'AA04' ]

Теперь вопрос: возможно ли выполнить sh без .split(','), используя Regex, и вернуть его так:

"Hello:A1,A3,A4,AA04".match(?).groups.g2 // would output: [ 'A1', 'A3', 'A4', 'AA04' ]

Я знаю, что я не лучший в объяснении этого, но я пытался найти ответ, я либо упускаю его, либо это невозможно. Это не критично или супер важно, просто что-то на мой взгляд. Извините за ужасный заголовок.

работает Node.js v13.2.0

1 Ответ

0 голосов
/ 20 апреля 2020

Добавлен ^ для соответствия только началу строки. Использование lookaheads.
Обратите внимание, что lookaheads не имеет хорошей поддержки браузера.
Кроме того, я не знаю / не тестировал характеристики производительности по сравнению с циклом exe c. И, если быть полностью честным, это выглядит не намного чище, чем раскол. Если вам нужен однострочный, этого будет достаточно, я думаю.
Я помню очень длинные строки на других платформах, использующих RegEx, как это не очень хорошо. Но я все равно прибег к другим методам поиска.

console.log(
"Hello:A1,A3,A4,AA04".match(/(^[A-Za-z]+(?=:))|((?=,?)([A-Za-z0-9]+))/g)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...