正则匹配获取字符

字符串{4}∧(-1)×{{2}√(A)+{2}√(B×(Tan(C)-Tan(D)))}∧(2)
怎样写正则匹配获取{}√()的内容?
比如,我要获取以上字符串中的{2}√(A){2}√(B×(Tan(C)-Tan(D)))

阅读 1.7k
1 个回答

js正则目前不支持多层递归,所以不能查找多级嵌套的情况

正则如何匹配多层成对的括号?

拿你这题来说,可以查找到}√(,然后左边找{,右边找),下面代码没有什么简化内容,应该很容易看懂。

String.prototype._match = function(a,b,c){
    console.log(a,b,c);//这里abc并没有用到,需要继续封装的话,可以把a参数代替正则/\}√\(/g,等等
    let str = this.toString();
    let arr = [];
    str.replace(/\}√\(/g,function(item,i){
        let flag1=1,flag2=1;
        for(var m=i-1;m>=0;m--){
            if(str[m]=="}"){
                flag1++
            }else if(str[m]=="{"){
                flag1--
            }
            if(flag1==0){
                break;
            }
        }
        for(var n=i+3;n<str.length;n++){
            if(str[n]=="("){
                flag2++
            }else if(str[n]==")"){
                flag2--
            }
            if(flag2==0){
                break;
            }
        }
        flag1 || flag2 || arr.push(str.substring(m,n+1));//flag1 flag2有一个为true都不追加数组
    })
    return arr;
}
console.log('{4}∧(-1)×{{2}√(A)+{2}√(B×(Tan(C)-Tan(D)))}∧(2)'._match())
console.log('{4}∧(-1)×{{2}√(A)+{{4}∧(-1)}√(B×(Tan(C)-Tan(D)))}∧(2)'._match())
推荐问题