-1

正規表現は次の条件を満たす必要があります。

  • 使用できる文字09XYAB[]-
  • ' ' の後-にスペース、' ]' または ' ['を入れることはできません
  • さらに、ブラケットの順序を確認する必要があります。

私はこの式 ' ([-(?!\[|\]|\ )09XYAB\[\]\-]){0,}' を書きましたが、このテスト文字列 ' ' でエラーの結果を取得し続けますABY-Ab[A0-]

4

3 に答える 3

0

@burning_LEGIONの答えは、ソリューションの前半を正しく提供します。この答えは後半を提供します。ネストされている場合でも、一致するブラケットのペアを検証します。@Sniffer は、単一の正規表現では実行できないという点で正しいです。ただし、ネストされた構造を正しく解析することは、JavaScript 正規表現を使用して内側から外側に解析することでかなり簡単に行うことができます...

JavaScript ソリューション [[入れ子] ブラケット用]

JavaScript 正規表現構文は再帰式を提供しないため、ブラケットがネストされている場合、一致するブラケットの最も外側のペアを一致させることは不可能です。ただし、一致するブラケットの最も内側のペアに正しく一致する正規表現を作成するのは非常に簡単です。

/\[[^[\]]*\]/g

以下のテスト済みの JavaScript 関数は、ブラケット ペアがネストされている可能性がある文字列に対して適切なブラケット ペア マッチングを検証します。上記の正規表現を使用して、一致する最も内側のブラケットのペアを内側から外側に繰り返し取り除くことによって、これを行います。すべての (ネストされている可能性がある) 一致するペアが削除されると、残りの角かっこ文字は、文字列に無効な角かっこの一致があることを示します。

function validBracketNesting(text) {
    // Regex to match innermost matching brackets
    var re_innerbrackets = /\[[^[\]]*\]/g;
    // Iterate stripping matching bracket pairs from inside out.
    while (text.search(re_innerbrackets) !== -1) {
        text = text.replace(re_innerbrackets, '');
    } // All (possibly nested) matching bracket pairs removed.
    // Any remaining bracket indicates invalid bracket pairing.
    return (text.match(/[[\]]/)) ? false : true;
}
于 2013-08-17T22:25:08.760 に答える