Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 嵌套括号逐个获取字符串_Javascript_Jquery - Fatal编程技术网

Javascript 嵌套括号逐个获取字符串

Javascript 嵌套括号逐个获取字符串,javascript,jquery,Javascript,Jquery,我让textbox和用户编写了一个公式,我从textbox中获取文本以拆分括号。顺便说一句,我没有尝试计算公式,我只是尝试获取字符串。我尝试从嵌套的括号中获取字符串。以下是我的代码: 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].s

我让textbox和用户编写了一个公式,我从textbox中获取文本以拆分括号。顺便说一句,我没有尝试计算公式,我只是尝试获取字符串。我尝试从嵌套的括号中获取字符串。以下是我的代码:

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
a-b
c+d

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

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

((a-b)/month)
(c+d)
说明:

  • 启动第一个捕获组
  • \(
    左括号
  • (?>
    向后看以检查
  • [^()]+
    …没有括号
  • |
    …或者
  • (?1)
    …有一个嵌套组已被此表达式捕获(递归)
  • \)
    右括号
  • 捕获组结束

啊。对不起。您的问题是关于JavaScript的,JavaScript不支持向后看。

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

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

((a-b)/month)
(c+d)
说明:

  • 启动第一个捕获组
  • \(
    左括号
  • (?>
    向后看以检查
  • [^()]+
    …没有括号
  • |
    …或者
  • (?1)
    …有一个嵌套组已被此表达式捕获(递归)
  • \)
    右括号
  • 捕获组结束
啊。对不起。你的问题是关于JavaScript的,JavaScript不支持向后看。

这是另一种方式

    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);
var a=[],r=[];
var txt=“((a-b)+(f-g))/月/(c+d)”;
对于(变量i=0;i
这是另一种方式

    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);
var a=[],r=[];
var txt=“((a-b)+(f-g))/月/(c+d)”;
对于(变量i=0;i我会考虑使用表达式解析器,从长远来看要容易得多。我是指嵌套括号((…))。考虑这样的字符串((a+b)/c),第一个字符串是(a+b)/c。第二个是(a+b),我会考虑使用表达式解析器,从长远来看要容易得多。我是嵌套括号((…))。考虑一个这样的字符串((a+b)/c),第一个字符串是(a+b)/c,第二个是(a+b),这就是我所说的。谢谢。