鍍金池/ 問(wèn)答/HTML/ 正則匹配獲取字符

正則匹配獲取字符

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

回答
編輯回答
深記你

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

正則如何匹配多層成對(duì)的括號(hào)?

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

String.prototype._match = function(a,b,c){
    console.log(a,b,c);//這里abc并沒(méi)有用到,需要繼續(xù)封裝的話,可以把a(bǔ)參數(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有一個(gè)為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