Javascript Regex返回一些结果

Javascript Regex返回一些结果,javascript,regex,Javascript,Regex,我从其他SO答案中得到了帮助。有了这个,我得到了[“COL”,“COL”],我想要得到的是[“COL”,“COL\u ID”]。什么是合适的正则表达式 var myString = "this is a __COL__ and here is a __COL_ID__"; var myRegexp = /__([A-Z]+)__/g; var match = myRegexp.exec(myString); console.log(match); // ["__COL__", "COL"]

我从其他SO答案中得到了帮助。有了这个,我得到了
[“COL”,“COL”]
,我想要得到的是
[“COL”,“COL\u ID”]
。什么是合适的正则表达式

var myString = "this is a __COL__ and here is a __COL_ID__";
var myRegexp = /__([A-Z]+)__/g;
var match = myRegexp.exec(myString);
console.log(match);  // ["__COL__", "COL"]

您只包含大写字母,并且缺少
\uuuu
。所以,正则表达式变成这样。函数只返回第一个匹配项,因此,我们必须一次又一次地执行
exec
,直到它返回
null

,

如果匹配成功,exec方法将返回一个数组并进行更新 正则表达式对象的属性。返回的数组已被删除 匹配的文本作为第一个项目,然后每个项目对应一个项目 捕获匹配的括号,其中包含 被俘

在我们的例子中,第一个值是整个匹配的字符串,第二个值是捕获的字符串。因此,我们只在
结果中推动
匹配[1]

var myString = "this is a __COL__ and here is a __COL_ID__";
var myRegexp = /__([A-Z_]+)__/g, match = myRegexp.exec(myString), result = [];
while (match) {
    result.push(match[1]);
    match = myRegexp.exec(myString);
}
console.log(result);
输出

[ 'COL', 'COL_ID' ]
这是有效的(以下是示例):


如果阅读,您将看到当前的结果是因为
.exec()
返回一个数组,其中包含“匹配的文本作为第一项,然后每个捕获括号对应一项,该捕获括号包含捕获的文本”。您的正则表达式与“COL\u ID”完全不匹配,因为除了开头和结尾之外,您不允许使用下划线字符。@nnnnnn,主要问题是我无法在结果中获取
COL\u ID
;但是,信息性的评论,谢谢。@Majidouladpour请检查我的最新答案。这是完全错误的。您忽略了分隔符,只是匹配了所有大写字母。如果您的测试字符串是
“这是一个列,这是一个ID”
,您会得到非常错误的结果。@meager Great point。可能会在正向前瞻中添加分隔符,如上面的编辑所示。但是,取决于OP作为字符串的内容,它也会匹配COL_uuuuuuuuuuu中的COL。是的,这还不够好。您现在只匹配了一半的分隔符。
var myString = "this is a __COL__ and here is a __COL_ID__";
var myRegexp = /([A-Z]+_[A-Z]+|[A-Z]+)(?=__)/g;
var match = myString.match(myRegexp);
console.log(match);