0

不完全な丸括弧を検出できる正規表現が必要です。私はこれを試しました。/^(?:(?!\(.*\)))/ 私のテスト文字列は thisです。(sampleこの正規表現は不完全なブラケットを検出します。つまり、結果を返しますtrue。ただし、テスト文字列が this の場合(sample) (another。その後、false を返します。

simple を探しよう/\(*\)/とすると、最初の完全なブラケットが検出されて返されるため、否定されたパターンを見つける必要があります。否定的な先読みを試みた後でも、失敗しています。どこが間違っているのか教えてください。

Ps OK、そのテスト文字列はあまりにも愚かです。これが私が実際に達成しようとしていることです。ユーザーは、((A と B) または (C と D)) または E のような自然なクエリを入力します。これは、一連のルールをグループ化するために使用されるものです。

4

5 に答える 5

1

他の回答が既に述べたように、JavaScript では再帰的な正規表現は使用できません。trueこれは、文字列が正しいペアのかっこを持つ場合、または問題が発生した文字インデックスのいずれかを返す関数です。

var nested_brackets = function (test) {
    var left = '(', right = ')';
    var i = 0, n = test.length, tally = 0;
    while (i < n) {
        if (test[i] == left) ++tally;
        else if (test[i] == right) --tally;
        if (tally < 0) break;
        ++i;
    }

    return (i == n && tally == 0) || i;
}

いくつかの例

nested_brackets("(A and (B or C))"); // returns true
nested_brackets("(A) and (B)");      // returns true
nested_brackets("(A and (B or C)");  // returns 15
nested_brackets("(A and B)) or C)"); // returns 9
于 2013-06-20T14:15:56.250 に答える
1

@ kmoermanによるこの回答に似た、正規表現 (およびネストされたブラケットの問題) を使用する代わりの方法を次に示します。truefalse{}

Javascript

function testParenthesisPairs(string /*, openChar, closeChar */ ) {
    var length = string.length,
        i = 0,
        count = 0,
        openChar = arguments[1] || "(",
        closeChar = arguments[2] || ")";

    while (i < length) {
        char = string.charAt(i);

        if (char === openChar) {
            count += 1;
        } else if (char === closeChar) {
            count -= 1;
        }

        if (count < 0) {
            return false;
        }

        i += 1;
    }

    return count === 0;
}

console.log(testParenthesisPairs("()()()()"));
console.log(testParenthesisPairs("()()()()", "(", ")"));
console.log(testParenthesisPairs("()()()("));
console.log(testParenthesisPairs(")()()()"));
console.log(testParenthesisPairs(")(()()()"));

出力

真 真 偽 偽 偽

jsfiddleについて

更新:コメントで@ Jonが指摘した@ Damaskによるこの回答にも似ています。

于 2013-06-20T14:38:06.280 に答える
1

この回答によると、かっこが正規表現のみで一致しているかどうかを判断することはできません。他のさまざまな方法で問題を解決する他の回答が利用可能です(つまり、正規表現のみに依存することはありません)。

于 2013-06-20T13:51:43.063 に答える