我不是Regex的专家,我只想做这件事。 创建这个数组:
["[1+5]", "1+5", "[2*[1+1]+5]", "2*[1+1]+5", "[1+1]", "1+1"]
来自这个字符串:
"blalbla[1+5] blabla [2*[1+1]+5] blalbla"
我测试了很多方法,我很头疼... 这里是测试我所做的事情的链接:https://jsfiddle.net/a47e60pd/1/
非常感谢:)
答案 0 :(得分:2)
不要使用正则表达式。只需使用循环。
function* parse(str) {
var indices = [];
for(var i=0; i<str.length; ++i) {
if(str[i] === '[') {
indices.push(i);
} else if(str[i] === ']') {
let idx = indices.pop();
yield str.slice(idx+1, i);
yield str.slice(idx, i+1);
}
}
}
console.log([...parse("blalbla[1+5] blabla [2*[1+1]+5] blalbla")]);
答案 1 :(得分:0)
可以使用像这样的干净正则表达式:
/\[[^[]+\]|\[.+?\]([^[])+\]/g
说明:
第1组:\[[^[]+\]
找到没有其他括号的开头和结尾的括号。
或|
第2组:
\[.+?\]
找到括号的开头,直到结束括号,([^[])+\]
继续找到所有不是“[”的字符,直到最后一个“]”
var ExpToReturn;
var text = "blalbla[1+5] blabla [2*[1+1]+5] blalbla";
var str = text.match(/\[[^[]+\]|\[.+?\]([^[])+\]/g);
ExpToReturn = (str);
alert (ExpToReturn);