Javascript 在正则表达式中访问多个捕获(新手事物…)

Javascript 在正则表达式中访问多个捕获(新手事物…),javascript,regex,capture,Javascript,Regex,Capture,在这个正则表达式多重捕获中,我必须添加“g”标志以获取所有项目 “aaa bbb ccc\n.000。\n\n.111。\n sd555 dsf\n.222。\n ddd”。匹配(/^。....$/gm) 当我添加“g”(全局)标志时?如何访问捕获的组。。。应该有3个像[“000”,“111”,“222”]但我不知道如何访问它们。。。我一直在获取[.000.”、“.111.”、“.222.”]如果您想在全局正则表达式中获取捕获组,很遗憾,您不能使用匹配。相反,您需要在正则表达式上使用: var

在这个正则表达式多重捕获中,我必须添加“g”标志以获取所有项目

“aaa bbb ccc\n.000。\n\n.111。\n sd555 dsf\n.222。\n ddd”。匹配(/^。....$/gm)


当我添加“g”(全局)标志时?如何访问捕获的组。。。应该有3个像[“000”,“111”,“222”]但我不知道如何访问它们。。。我一直在获取[.000.”、“.111.”、“.222.”]如果您想在全局正则表达式中获取捕获组,很遗憾,您不能使用
匹配。相反,您需要在正则表达式上使用:

var myregex = /^.(.*).$/gm;
var result, allMatches = [];
while((result = myregex.exec(mystring)) != null) {
    var match = result[1]; // get the first match pattern of this match
    allMatches.push(match);
}
对于全局正则表达式,
match
返回所有匹配项的数组,并且从不返回捕获组
exec
返回单个匹配及其所有捕获组。要获取所有匹配项,必须多次调用
exec
,直到它最终返回
null

注意
exec
依赖于正则表达式维护状态,因此您必须将正则表达式保存在变量中:

while((result = /^.(.*).$/gm.exec(mystring)) != null) // BAD and WRONG!

这是错误的,因为对于每个循环,都有一个新的正则表达式,它不知道应该返回这个循环的匹配项。(或者更准确地说,它不知道上一个正则表达式的
lastIndex

如果您想在全局正则表达式中获取捕获组,很遗憾,您不能使用
匹配。相反,您需要在正则表达式上使用:

var myregex = /^.(.*).$/gm;
var result, allMatches = [];
while((result = myregex.exec(mystring)) != null) {
    var match = result[1]; // get the first match pattern of this match
    allMatches.push(match);
}
对于全局正则表达式,
match
返回所有匹配项的数组,并且从不返回捕获组
exec
返回单个匹配及其所有捕获组。要获取所有匹配项,必须多次调用
exec
,直到它最终返回
null

注意
exec
依赖于正则表达式维护状态,因此您必须将正则表达式保存在变量中:

while((result = /^.(.*).$/gm.exec(mystring)) != null) // BAD and WRONG!

这是错误的,因为对于每个循环,都有一个新的正则表达式,它不知道应该返回这个循环的匹配项。(或者更准确地说,它不知道上一个正则表达式的
lastIndex

str.match(re)返回的结果是一个数组

在这里演示

更新 这是我对问题第二部分的回答。 问题: 如何去掉数字前后的圆点

我的答覆是: 我只需循环匹配,并用空字符串替换点。 另外,正则表达式是错误的,因为需要避开圆点

更新了jsiddle演示:

var re=/^\.([^\.]+)\.$/gm;
var lines=“aaa bbb ccc\n.000。\n\n.111。\n sd555 dsf\n.222。\n ddd”;
var匹配=行。匹配(re);
变量i=(匹配| |[])。长度;
而(我--){
匹配项[i]=匹配项[i]。替换(/\./g',);
}
document.body.innerHTML+=matches.join(“
”);
str.match(re)返回的结果是一个数组

在这里演示

更新 这是我对问题第二部分的回答。 问题: 如何去掉数字前后的圆点

我的答覆是: 我只需循环匹配,并用空字符串替换点。 另外,正则表达式是错误的,因为需要避开圆点

更新了jsiddle演示:

var re=/^\.([^\.]+)\.$/gm;
var lines=“aaa bbb ccc\n.000。\n\n.111。\n sd555 dsf\n.222。\n ddd”;
var匹配=行。匹配(re);
变量i=(匹配| |[])。长度;
而(我--){
匹配项[i]=匹配项[i]。替换(/\./g',);
}
document.body.innerHTML+=matches.join(“
”);
在FireBug中:

var hello = "aaa bbb ccc \n.000.\n \n.111.\n sd555 dsf \n.222.\n ddd ".match( /^.(.*).$/gm );
console.dir(hello);
然后您可以使用
hello[n]
其中n是您想要的匹配项,例如'hello[1]

但是,如果只想匹配某些内容,则需要修改正则表达式。

在FireBug中:

var hello = "aaa bbb ccc \n.000.\n \n.111.\n sd555 dsf \n.222.\n ddd ".match( /^.(.*).$/gm );
console.dir(hello);
然后您可以使用
hello[n]
其中n是您想要的匹配项,例如'hello[1]


但是,如果只想匹配某些内容,则需要修改正则表达式。

问题是什么?你需要字符串中的3个数字或3个字母或其他什么?问题是什么?您需要字符串中的3个数字或3个字母或其他内容?我知道,问题是如何让正则表达式中的(*)完成捕获我知道,问题是如何让正则表达式中的(*)完成捕获k larry,但是请注意。。。正则表达式中的(*)所做的捕获应该已经去除了点。。。我应该得到[“000”,“111”,“222”]而不是[“000”,“111”,“222”]好的。。。我想马上做这件事的希望消失了。。。我将坚持删除…;-)之后的圆点好吧,拉里,但是请注意。。。正则表达式中的(*)所做的捕获应该已经去除了点。。。我应该得到[“000”,“111”,“222”]而不是[“000”,“111”,“222”]好的。。。我想马上做这件事的希望消失了。。。我将坚持删除…;-)之后的圆点