鍍金池/ 問答/HTML/ 正則匹配獲取字符

正則匹配獲取字符

字符串{4}∧(-1)×{{2}√(A)+{2}√(B×(Tan(C)-Tan(D)))}∧(2),
怎樣寫正則匹配獲取{}√()的內(nèi)容?
比如,我要獲取以上字符串中的{2}√(A){2}√(B×(Tan(C)-Tan(D)))。

回答
編輯回答
深記你

js正則目前不支持多層遞歸,所以不能查找多級嵌套的情況

正則如何匹配多層成對的括號?

拿你這題來說,可以查找到}√(,然后左邊找{,右邊找),下面代碼沒有什么簡化內(nèi)容,應該很容易看懂。

String.prototype._match = function(a,b,c){
    console.log(a,b,c);//這里abc并沒有用到,需要繼續(xù)封裝的話,可以把a參數(shù)代替正則/\}√\(/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都不追加數(shù)組
    })
    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())
2017年4月23日 20:20