JavaScript正则表达式 - 奇怪的结果

时间:2013-06-20 17:43:30

标签: javascript regex

我在下面有一个示例字符串:

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

我正在尝试匹配所有带有和没有空格的节点,所以在&lt;&gt;之间的任何东西(数字,空格,文本和所有字符 - 想想一切!)包括&lt;&gt;。我尝试了很多配置,但它们看起来并不直观,我最近的逻辑就是这样:

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

但它与ENTIRE测试字符串匹配。任何人都可以提供任何关于我可能出错的线索吗?谢谢!

3 个答案:

答案 0 :(得分:3)

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

如果您想进行延迟搜索,请使用.*?尽可能少地匹配

答案 1 :(得分:1)

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

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

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

您想要的结果是在第二个捕获的组中。了解它的工作原理here

顺便提一下\1是指第一个被捕获的群体。

如果您的节点数量高于node0node9,那么您更愿意:

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

答案 2 :(得分:0)

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

/<([^>]+)>/