Если вы используете шаблон ([a-z]*)(\[(\d)\])
, вы можете использовать некоторое время l oop, чтобы получить первую и третью группы захвата, но учтите, что использование [a-z]*
соответствует 0+ раз и может также соответствовать частям в [0][2]
например .
const regex = /([a-z]*)(\[(\d)\])/g;
const str = `foo[0][2]`;
let m;
let result = [];
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
if (m[1] !== "") result.push(m[1]);
if (m[3] !== "") result.push(m[3]);
}
console.log(result);
Если вы хотите соответствовать этому точному формату, вы можете использовать 2 группы захвата для первого совпадения foo
в группе 1 и [0][2]
в группе 2
\b([a-z]+)((?:\[\d])+)
Пояснение
\b
Граница слова (
Захват группа 1 -
[a-z]+
Совпадение 1+ раз за символ аз
)
Закрыть группу (
Захват группа 2 (?:\[\d])+
Повторить 1+ раз, сопоставляя один ди git между []
(используйте \d+
для соответствия 1 или более)
)
Закрыть группу
Regex demo
Если этот шаблон соответствует, вы можете получить все цифры из группы 2, поскольку общий шаблон уже соответствует.
const pattern = /\b([a-z]+)((?:\[\d])+)/;
let parts = "foo[0][2]".match(pattern);
console.log([parts[1], ...parts[2].match(/\d/g)]);