我在下面有一个示例字符串:
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测试字符串匹配。任何人都可以提供任何关于我可能出错的线索吗?谢谢!
答案 0 :(得分:3)
.*
贪婪 - 意味着它会尽可能地与匹配(在这种情况下,从第一个<
到最后一个>
)。
如果您想进行延迟搜索,请使用.*?
尽可能少地匹配 。
答案 1 :(得分:1)
.*
意味着.
贪婪,它会尽可能多地匹配,这可以解释您的结果。
你可能想要得到的是这个正则表达式:
<node(\d)>(.*?)<\/node\1>
您想要的结果是在第二个捕获的组中。了解它的工作原理here。
顺便提一下\1
是指第一个被捕获的群体。
如果您的节点数量高于node0
到node9
,那么您更愿意:
<node(\d+)>(.*?)<\/node\1>
答案 2 :(得分:0)
一种好方法是使用绑定字符类来避免贪婪/懒惰问题:
/<([^>]+)>/