我无法从正则表达式匹配的结果中获取数组:
var txt = '[Eig2]=>100 [Eig1]=="test"';
var reg = '(\\[)((?:[a-z][a-z]+))(\\d+)(\\])';
var m = txt.match(new RegExp(reg, ["i"]));
if (m != null) {
for (var i = 0; i < m.length; i++) {
console.log(m[i]);
}
} else {
console.log("null");
}
它返回的内容:
[Eig2]
[
Eig
2
]
我想要的是什么:
[Eig2]
[Eig1]
我可以在没有“新RegExp”的情况下进行,但是使用“/([)((?:[az] [az] +))(\ d +)(])/ g”它不起作用。 ..
一些想法?
此致
答案 0 :(得分:2)
你应该修改
var m = txt.match(new RegExp(reg, ["i"]));
到
var m = txt.match(new RegExp(reg, ["ig"]));
将g
标志添加到正则表达式中,这意味着您要匹配字符串中的所有模式,而不是第一个及其子模式。
答案 1 :(得分:2)
首先,我会简化表达式:
var re = /\[([a-z]{2,}\d+)\]/ig;
我添加了/i
用于不区分大小写的匹配和/g
修饰符以匹配多个匹配项。然后你这样称呼它:
> txt.match(re);
["[Eig2]", "[Eig1]"]
提取第一个内存捕获:
var captures = [];
txt.replace(re, function($0, $1) {
captures.push($1);
});
当然,.replace()
在这里被滥用
然后,评估捕获:
> captures
["Eigh2", "Eigh1"]
<强>更新强>
构建内存捕获数组的一种更友好的方法:
var captures = [], match;
while ((match = re.exec(txt)) !== null) {
captures.push(match[1]);
});