0

以下にサンプル文字列があります。

var nodeTest = "<node1>xxxxxxx<x> xxx</node1>xxx xx</x>x x x xxxxxx <node2>xx x x xxxxxxxxxx</node2> xxxxx";

<> を含む <> の間のすべてのノード (数字、空白、テキスト、およびすべての文字 - すべてを考えてください!) を空白の有無にかかわらず一致させようとしています。私は多くの構成を試しましたが、直感的には機能しないようです。私の最新のロジックは次のとおりです。

var nodePairs = nodeTest.match(/<(.*)>/gi);

ただし、テスト文字列全体と一致します。私が間違っている可能性がある場所について、誰かが手がかりを提供できますか? ありがとう!

4

3 に答える 3

3

.*貪欲です-つまり、可能な限り一致します(この場合、最初<から最後まで>)。

遅延検索が必要な場合は、 を使用.*?して一致を最小限に抑えます。

于 2013-06-20T17:44:55.430 に答える
1

は貪欲で.*あることを意味し、.可能な限り一致し、結果を説明します.

おそらく取得したいのは、次の正規表現です。

<node(\d)>(.*?)<\/node\1>

必要な結果は、2 番目のキャプチャ グループにあります。ここでどのように機能するかを参照してください。

ちなみに、\1は最初にキャプチャされたグループを指します。

よりも大きい数のノードがある場合はnode0node9次のことをお勧めします。

<node(\d+)>(.*?)<\/node\1>
于 2013-06-20T17:46:58.467 に答える
0

貪欲/怠惰な問題を回避するために、バインド文字クラスを使用することをお勧めします。

/<([^>]+)>/
于 2013-06-20T18:12:17.370 に答える