2

単一の括弧で囲まれた数値に一致する正規表現が必要です。たとえば、次のようなものに一致します。

(1)

ただし、次の内部と一致しない必要があります。(1)

((1))

もともと私はこれを試しました:

([^\(])\(([0-9]+)\)([^\)])

しかし、文字列の最初または最後にある単一の括弧で囲まれた数字と一致しませんでした。そのblah blah (1)ため、非常に明確に含まれているにもかかわらず、一致を返しませんでした(1)。これは、文字列の先頭または末尾に検索する文字がない場合、上記の正規表現が開き括弧または閉じ括弧にない文字を検索するためです。

それから私はこれを試しました:

([^\(]?)\(([0-9]+)\)([^\)]?)

これは正常に一致しましたが、正規表現で囲まれた括弧を無視しただけなので、 insideに(1)も一致しました。したがって、これは私のニーズには広すぎました。(1)((1))

私は実験を続け、解決策が見つかったらここに投稿しますが、どんな助けも大歓迎です。何か案は?

注意してください: 私は JavaScript を使用しています。一部の正規表現機能は JavaScript に含まれていません。


アップデート:

一致が重要な場合、括弧内で数値をキャプチャすることが重要であることを明示的に指摘しませんでした。(読みにくくすることは別として、以下に示す解決策に悪影響を及ぼさないことを願っています!) ただし、(1)結果として の全体を置き換える必要があるため、両方の括弧を一致させることも重要です。

示唆に富むすべての回答により、さまざまな状況で望ましい結果をたくさん引き出すことができました。願わくば、これにより、表現の目的がどうあるべきかがより明確になります。

  • (1)==> '(1)' にマッチし、'1' をキャプチャ

  • ((1))==> 一致しない

  • (((1)))==> 一致しない

  • (1) (2)==> '(1)' と '(2)' を照合し、'1' と '2' をキャプチャ

  • (1) ((2))==> '(1)' にマッチし、'1' をキャプチャ

  • ((1) (2))==> '(1)' と '(2)' を照合し、'1' と '2' をキャプチャ

  • (1)(2)==> '(1)' と '(2)' に一致し、'1' と '2' をキャプチャする [理想的には] OR 一致しない

  • (1)((2))==> '(1)' に一致し、'1' をキャプチャ [理想的には] または一致しない

  • ((1)(2))==> '(1)' と '(2)' に一致し、'1' と '2' をキャプチャする [理想的には] OR 一致しない

これらの最後の 3 つについては、寛大さがあるので「理想的に」と言います。最初の結果が望ましいですが、それが不可能な場合は、一致するものがまったくなくてもかまいません。これは難しいことだとは思いますが (JavaScript の RegExp の制限内では不可能かもしれません)、この専門家フォーラムに質問を投げかけているのはそのためです。

4

4 に答える 4

2

ここでは、否定的な先読みに続いて否定的な先読みを行っています。

\((?!\()(\d+)\)(?!\))

正規表現イメージ

Debuggex でライブ編集

于 2013-07-03T19:07:49.767 に答える
1

これは、あなたの望むことですか?

"(1)(2)((3))".match(/(\({1}\d+\){1})/g) // === ["(1)", "(2)", "(3)"]

あなたが望むもののように見え、他の方法よりも少し簡単に見えますが、何かが足りないかもしれません...

編集:要件を逃しました、それは簡単すぎると思いました...

まあ、これをコードに負担させるjs正規表現には制限があるので、私は望ましい結果を得るために少し違うことをします:

 "(1)(2)((3))".match(/(\({1,}\d+\){1,})/g)
  .filter(/./.test, /^\(\d\)$/) // == ["(1)", "(2)"]
于 2013-07-03T19:07:23.670 に答える