我有以下字符串:
[a] [abc] test [zzzz]
我正试图像这样得到一个数组:
[0] => a
[1] => abc
[2] => zzzz
我尝试过以下代码:
var string = '[a] [abc] test [zzzz]';
var matches = string.match(/\[(.*?)\]/g);
for(var i = 0; i < matches.length; i++)
console.log(matches[i]);
但我的控制台输出显示:
[a]
[abc]
[zzzz]
我尝试添加两个非捕获组(?:
),如下所示:
var matches = string.match(/(?:\[)(.*?)(?:\])/g);
但我看到相同的比赛,没有改变。
出了什么问题,我怎样才能得到我想要的阵列?
答案 0 :(得分:3)
match
不会捕获全局匹配中的组。为此目的我做了一个小帮手。
String.prototype.gmatch = function(regex) {
var result = [];
this.replace(regex, function() {
var matches = [].slice.call(arguments,1,-2);
result.push.apply(result, matches);
});
return result;
};
并使用它:
var matches = string.gmatch(/\[(.*?)\])/g);
答案 1 :(得分:0)
[[]\s*(\b[^]]*\b)\s*[\]]
第1组将包含打开和关闭括号之间所有文本的字符串数组
匹配将拉出所有匹配的子串并显示它们,因为它只使用正则表达式,它运行速度稍快,然后使用切片
var re = /[[]\s*(\b[^]]*\b)\s*[\]]/;
var sourcestring = "source string to match with pattern";
var results = [];
var i = 0;
for (var matches = re.exec(sourcestring); matches != null; matches = re.exec(sourcestring)) {
results[i] = matches;
for (var j=0; j<matches.length; j++) {
alert("results["+i+"]["+j+"] = " + results[i][j]);
}
i++;
}
(
[0] => Array
(
[0] => [a]
[1] => [abc]
[2] => [zzzz]
)
[1] => Array
(
[0] => a
[1] => abc
[2] => zzzz
)
)