获取两个字符之间的所有字符串数组(Regex + JavaScript)

时间:2016-08-28 20:20:22

标签: javascript arrays regex

我不是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/

非常感谢:)

2 个答案:

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