Javascript 如何使用捕获括号捕获多个引用

Javascript 如何使用捕获括号捕获多个引用,javascript,regex,Javascript,Regex,我试图从文本中仅提取关键字符串部分“ProcessName”和“ProcessID”。 文本可以有更多的键。(为了简单起见,我只使用带有两个键的文本) 是否可以捕获该组的多个事件 var text = "[ProcessName] - [ProcessID]"; var regex = new RegExp(/\[[(A-Za-z0-9)]+\]/g); var result = regex.exec(text); console.log(result); var regex = new Re

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

var text = "[ProcessName] - [ProcessID]";
var regex = new RegExp(/\[[(A-Za-z0-9)]+\]/g);
var result = regex.exec(text);
console.log(result);
var regex = new RegExp(/\[([A-Za-z0-9]+)\]/g);
var matches, output = [];
while (matches = regex.exec(text))
{
    output.push(matches[1]);
}
当我使用exec时,它只给了我一个匹配项,并且带有括号,所以它似乎没有任何用处。

var regex = new RegExp(/\[([A-Za-z0-9]+)\]/g);
var matches, output = [];
while (matches = regex.exec(text))
{
    output.push(matches[1]);
}
还尝试了match(),但它包含方括号。尝试了很多次,但似乎都做不好

var result = text.match(regex);
var regex = new RegExp(/\[([A-Za-z0-9]+)\]/g);
var matches, output = [];
while (matches = regex.exec(text))
{
    output.push(matches[1]);
}

您将圆括号和方括号放错位置,从而使捕获组成为角色类的一部分,从而阻止创建子匹配

var regex = new RegExp(/\[([A-Za-z0-9]+)\]/g);
var matches, output = [];
while (matches = regex.exec(text))
{
    output.push(matches[1]);
}
您需要交换括号的位置:

/\[([a-z0-9]+)]/gi
var regex = new RegExp(/\[([A-Za-z0-9]+)\]/g);
var matches, output = [];
while (matches = regex.exec(text))
{
    output.push(matches[1]);
}
请参阅下面的示例和JS演示

var regex = new RegExp(/\[([A-Za-z0-9]+)\]/g);
var matches, output = [];
while (matches = regex.exec(text))
{
    output.push(matches[1]);
}
图案细节

var regex = new RegExp(/\[([A-Za-z0-9]+)\]/g);
var matches, output = [];
while (matches = regex.exec(text))
{
    output.push(matches[1]);
}
  • \[
    -文字
    [
  • ([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);
在我提出一个问题后不久,我找到了答案

var regex = new RegExp(/\[([A-Za-z0-9]+)\]/g);
var matches, output = [];
while (matches = regex.exec(text))
{
    output.push(matches[1]);
}

你知道你的模式匹配什么吗?
\[[(A-Za-z0-9)]+\]
匹配一个
[
,后跟一个或多个
,字母,数字,
,然后匹配尾随的
]
。这里没有捕获组。你真正想要匹配的是什么?一个
[…]
中的字母数字?使用
/\[[A-z0-9]+]/ig
RegExp#exec
在一个循环中。访问匹配[1]值。最好运行
console.log(JSON.stringify(result))
并包含结果文本,而不是发布结果的图像……请注意
RegExp#exec
/\[([a-z0-9]+)]/gi
regex在这里是齐头并进的,如果您需要使用没有全局标志的regex(只匹配一个匹配项),那么只需使用
String 35; match