正则表达式不使用类似的字符串

时间:2012-06-18 15:33:58

标签: regex

我正在尝试获取下面提到的字符串的开始和结束标记之间的内容

<a href="./products/" class="link">Products </a>

<a href="./servicesandsolutions/" class="link">Services & Solution </a>

使用正则表达式:

<([a-z0-9]+)([^<]+)\*(?:>(.\*?)</\\2>|\\D+/>)

它适用于第一个字符串,但不适用于后一个字符串

5 个答案:

答案 0 :(得分:1)

为什么这么复杂?简单/>([^<]+)</不会捕获元素的内容吗?

答案 1 :(得分:1)

取决于正则表达式的风格 - 使用前瞻和后瞻方法来获得&gt;之间的匹配和&lt;即。

(?<=>)[^>]*(?=<)

(?<=>) - 展望&gt;

(?=<) - 了解&lt;

[^>]* - 匹配链接本身的文字

lookahead和lookbehind是零宽度匹配,因此将获得你需要的东西

答案 2 :(得分:0)

摆脱标签。

var str = '<a href="./products/" class="link">Products </a>'
var str2 = '<a href="./servicesandsolutions/" class="link">Services & Solution </a>'
var RE_findOpenAndCloseTag = /^<[^>]+>|<\/[^>]>$/g;

str.replace( RE_findOpenAndCloseTag, '' ) == "Products ";
str2.replace( RE_findOpenAndCloseTag, '' ) == "Services & Solution ";

请注意,RE_findOpenAndCloseTag假定代码始终以<开头,并且不包含>,除非它正在关闭代码。 因此,这将失败。 '&gt;“&gt;这将失败

但更简单的方法是将标记转换为节点,然后获取innerHTML。

答案 3 :(得分:0)

通常你不想用正则表达式解析自己的HTML,解析器就更好了。

假设您正在使用PCRE,则可以随意猜测您正在寻找的表达式:

(?is)<([a-z]+)\b[^<>]*(?:>(.*?)</\1>|/>)

请注意,这不适用于嵌套代码。

答案 4 :(得分:0)

尝试此操作可以解决您的问题(只需添加|</\1>

<([a-z0-9]+)([^<]+)*(?:>(.*?)|\D+/>|</\1>)

For more detail please refer