正则表达式返回一些结果

时间:2014-01-05 02:55:38

标签: javascript regex

我已将这些内容从其他SO答案中获得帮助。有了这个,我得到["__COL__", "COL"],我想得到的是["COL", "COL_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"]

2 个答案:

答案 0 :(得分:2)

您只包含大写字母,并且缺少_。因此,RegEx就像这样/__(\[A-Z_\]+)__/g。并且exec函数仅返回第一个匹配项,因此,我们必须一次又一次地exec,直到它返回null

exec returns

  

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

在我们的例子中,第一个值是整个匹配的字符串,第二个值是捕获的字符串。因此,我们仅在match[1]中推送result

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' ]

答案 1 :(得分:0)

这可行(这里是jsfiddle):

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);