正则表达式用于捕获字符串中的多个数组索引文本



对于那里的人来说可能很简单,但我想构建一个正则表达式来搜索这个字符串:

foo[0][2]

并返回

foo
0
2

在匹配数组中

到目前为止,我想出的是

([a-z]*)([(d)])/g

只回馈

0: "foo[0]"
1: "foo"
2: "[0]"
3: "0"

它不会重复到我的字符串中的下一个文字数组,因此不会击中[2]部分。

我不是正则表达式忍者,希望得到一些帮助,以达到我需要的正确表达。

谢谢

我认为您正在寻找这种模式:([a-z]+)|([d])

console.log('foo[0][2]'.match(/([a-z]+)|([d])/g));


如果你不想要[]部分,你可以试试这个:

console.log('foo[0][2]'.match(/([a-z]+)|(d)/g));

如果您使用模式([a-z]*)([(d)])则可以使用 while 循环来获取第一个和第三个捕获组,但请注意,使用[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 个捕获组首先匹配组 1 中的foo[0][2]组 2 中的

b([a-z]+)((?:[d])+)

解释

  • b单词边界
  • (捕获组 1
    • [a-z]+匹配 1+ 次 a 字符 a-z
  • )关闭组
  • (捕获组 2
    • (?:[d])+重复 1+ 次匹配[]之间的一位数字(使用d+匹配 1 个或多个(
  • )关闭组

正则表达式演示

如果该模式匹配,则可以从组 2 中获取所有数字,因为整体模式已经匹配。

const pattern = /b([a-z]+)((?:[d])+)/;
let parts = "foo[0][2]".match(pattern);
console.log([parts[1], ...parts[2].match(/d/g)]);

最新更新