簡體   English   中英

如何在JavaScript中將輸入括號與正則表達式匹配?

[英]How to match a input parenthesis with regular expression in JavaScript?

我不知道將輸入括號與JavaScript匹配。

輸入字符串示例:

(pen)
((pen) and orange)

如果輸入字符串如下所示,則應返回false:

(pen
pen)
(pen) and orange)
((pen and orange )
((pen) and orange 
)(pen and orange )(
(pen and )orange() 

正則表達式會很雜亂。 一個簡單的計數器要容易得多。

function parenthesesBalanced(string) {
    var count = 0;

    for (var i = 0, l = string.length; i < l; i++) {
        var char = string.charAt(i);

        if (char == "(") {
            // Opening parenthesis is always OK
            count++;
        } else if (char == ")") {
            // If we're at the outer level already it's not valid
            if (count == 0) return false;
            count--;
        }
    }

    return (count == 0);
}

這是一個已知的難題 ,以配合正則表達式的括號。 盡管有可能,但它並不是特別有效。

簡單地遍歷字符串,維護一個計數器,每次擊中一個打開的paren時將其遞增,並在每次擊中一個緊密的paren時將其遞減則要快得多。 如果計數器曾經低於零,或者在字符串末尾計數器不為零,則它將失敗。

將所有“左括號-一些字符-右括號”的組替換為空,直到沒有更多組為止。 如果結果字符串包含括號,則說明括號未達到平衡。

balancedParens = function(str) {
    var q;   
    do {
      q = str;
      str = str.replace(/\([^()]*\)/g, '');
    } while(q != str);
    return !str.match(/[()]/);
}

    a = "foo ((and) bar and (baz) quux) and (blah)";
    b = "(dddddd()";

alert(balancedParens(a))
alert(balancedParens(b))

http://jsfiddle.net/gvGGT/

在javascript中,不可能用單個正則表達式來匹配平衡字符串,因為JS方言不支持遞歸表達式。

我進行了一個平衡的節點庫調用,以使其更加理智,如果您只想獲得平衡的外部匹配,則可以這樣做

balanced.matches({source: source, open: '(', close: ')'})

我的用例有點復雜,需要我做替換和支持意見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM