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

.*是贪婪的 - 意味着它会尽可能匹配(在这种情况下,从第一个<到最后一个>)。

如果您想要惰性搜索,请使用.*?to match as possible

于 2013-06-20T17:44:55.430 回答
1

.*意味着它.是贪婪的,它会尽可能多地匹配,这解释了你的结果。

您可能想要得到的是这个正则表达式:

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

您想要的结果在第二个捕获的组中。看看它是如何工作

\1顺便说一句,指的是第一个捕获的组。

如果您的节点数量高于node0to node9,那么您更喜欢:

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

一个好方法是使用绑定字符类来避免贪婪/懒惰问题:

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