嵌套括号逐个获取字符串

时间:2015-05-28 13:46:35

标签: javascript jquery

我有文本框和用户编写公式,我从文本框中获取文本以拆分括号。通过我不试图计算公式的方式我尝试只是获取字符串。我试图从嵌套中获取字符串括号这是我的代码:

var txt = "((a-b)/month)/(c+d)";
var reg = /^\((.+)\)$/;
var newTxt = txt.split('(');
for (var i = 1; i < newTxt.length; i++) {
    var value = newTxt[i].split(')')[0];

    if (value == "") {
        value = txt.match(reg)[1];
    }
    console.log(value);
}

我的输出是

   (a-b)/month)/(c+d
    a-b
    c+d

但我正试图在括号之间加上字符串,如

(a-b)/month
a-b
c+d

2 个答案:

答案 0 :(得分:2)

这将捕获外括号中的文本,包括括号本身:

(\((?>[^()]+|(?1))*\))

输出:

((a-b)/month)
(c+d)

说明:

  • (首先开始捕获群组
  • \(左括号
  • (?>回头看看......
  • [^()]+ ...没有括号......
  • | ......或那......
  • (?1) ...这个表达式已经捕获了一个嵌套组(递归)
  • \)右括号
  • )结束捕获小组

阿。抱歉。您的问题是关于JavaScript和JavaScript不支持后视。

答案 1 :(得分:2)

这是另一种方式

    var a = [], r = [];
    var txt = "(((a-b)+(f-g))/month)/(c+d)";
    for(var i=0; i < txt.length; i++){
        if(txt.charAt(i) == '('){
            a.push(i);
        }
        if(txt.charAt(i) == ')'){
            r.push(txt.substring(a.pop()+1,i));
        }
    }    
    alert(r);