我已将这些内容从其他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"]
答案 0 :(得分:2)
您只包含大写字母,并且缺少_
。因此,RegEx就像这样/__(\[A-Z_\]+)__/g
。并且exec
函数仅返回第一个匹配项,因此,我们必须一次又一次地exec
,直到它返回null
。
如果匹配成功,则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);