gpt4 book ai didi

javascript - 如何使用捕获括号捕获多次出现

转载 作者:行者123 更新时间:2023-11-29 10:34:17 25 4
gpt4 key购买 nike

我试图从文本中仅提取关键字符串部分“ProcessName”和“ProcessID”。文本可以有更多的关键。 (为了简单起见,我只是使用带有两个键的文本)是否可以捕获组的多次出现?

var text = "[ProcessName] - [ProcessID]";
var regex = new RegExp(/\[[(A-Za-z0-9)]+\]/g);
var result = regex.exec(text);
console.log(result);

当我使用 exec 时,它只给我一个匹配项和括号,所以它似乎没有用。 enter image description here

也试过 match() 但它包含方括号。尝试了很多次,但似乎无法正确处理。

var result = text.match(regex);

enter image description here

最佳答案

您错误地放置了圆括号和方括号,从而使捕获组成为字符类的一部分,从而阻止了子匹配的创建。

你需要交换括号的位置:

/\[([a-z0-9]+)]/gi

参见 regex demo和下面的 JS 演示。

图案细节:

  • \[ - 文字 [
  • ([a-z0-9]+) - 第 1 组捕获一个或多个字母数字
  • ] - 文字右括号(当它在字符类之外时无需转义)
  • /gi - 全局和不区分大小写的匹配修饰符([a-z] 也将匹配 A-Z,处理每个非重叠匹配)

var re = /\[([a-z0-9]+)]/gi; 
var str = '[ProcessName] - [ProcessID]';
var res = [];
while ((m = re.exec(str)) !== null) {
res.push(m[1]);
}
console.log(res);

在代码中,我们需要使用 RegExp#exec 而不是 String#match 因为后者在与具有全局修饰符的正则表达式一起使用时会丢弃所有子匹配(捕获的部分)(参见 Description at MDN String#match 页)。

关于javascript - 如何使用捕获括号捕获多次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39358201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com