需要正则表达式才能从下面的代码段中仅获取Anchor标记。

时间:2014-10-16 11:13:56

标签: regex

我试图从下面的代码片段中单独获取锚标记。我对使用(<li><a .*>.*<\/a><\/li>)尝试的正则表达式不熟悉,这给我带来了所有代码<li><a xlink:href="" title="" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title=""></a></li> <li><a title="" xlink:href="tcm:" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title=""></a></li> <li><a title="" xlink:href="tcm:" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title=""></a></li> <li><a title="" xlink:href="tcm:" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title=""></a></li> <li><a title="" xlink:href="tcm:" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title=""></a></li>

但我需要正则表达式为我带来单独的锚标记,而不是完整的结构。例如<li><a xlink:href="" title="" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title=""></a></li><li><a title="" xlink:href="tcm:" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title=""></a></li>以及<li><a title="" xlink:href="tcm:" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title=""></a></li>等。

来源如下。

<tmproot><h4 xmlns="http://www.w3.org/1999/xhtml"></h4><p xmlns="http://www.w3.org/1999/xhtml"> <br /></p><p xmlns="http://www.w3.org/1999/xhtml"> <br /></p><ul xmlns="http://www.w3.org/1999/xhtml"><ul> <li><a xlink:href="" title="" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title=""></a></li> <li><a title="" xlink:href="tcm:" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title=""></a></li> <li><a title="" xlink:href="tcm:" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title=""></a></li> <li><a title="" xlink:href="tcm:" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title=""></a></li> <li><a title="" xlink:href="tcm:" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:title=""></a></li> </ul></ul></tmproot>

2 个答案:

答案 0 :(得分:0)

而不是(<li><a .*>.*<\/a><\/li>)使用<li>(<a .*>.*<\/a>)<\/li>

注意()的不同定位。 ()是您正在捕获的内容,因此如果您只想要锚标记,请将正则表达式的锚点部分包装在()中。

Javascript示例:

var el = document.getElementById('myTextarea');
var txt = el.value;
var res = txt.match(/<li>(<a .*>.*<\/a>)<\/li>/g);
for(var x in res){
  console.log(res[x]);
}

答案 1 :(得分:0)

我认为你的正则表达式的问题是.*是贪婪的,即它尽可能匹配。在大多数语言中,添加?会使其不情愿:(<li><a .*?>.*?<\/a><\/li>)

也就是说,解析XML和正则表达式通常不是一个好主意,有很多陷阱和极端情况,例如,如果标记包含注释或CDATA会发生什么?