2

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

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

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

使用的正则表达式:

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

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

4

5 回答 5

1

根据正则表达式的风格 - 使用前瞻和后瞻方法来获得 > 和 < 即之间的匹配

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

(?<=>)- 向前看 >

(?=<)- 在后面寻找一个 <

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

lookahead 和 lookbehind 是零宽度匹配,所以只会得到你需要的

于 2012-06-18T16:00:07.563 回答
1

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

于 2012-06-18T15:55:08.487 回答
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假设标签将始终以 a 开头<并且不包含 a ,>除非它正在关闭标签。因此这将失败。'>">这将失败

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

于 2012-06-18T15:52:02.100 回答
0

通常你不想用正则表达式解析你自己的 HTML,解析器在这方面做得更好。

假设您使用的是 PCRE,这是对您要查找的表达式的随机猜测:

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

请注意,这不适用于嵌套标签。

于 2012-06-18T15:53:38.863 回答
0

试试这个它会解决你的问题(只需添加|</\1>

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

更多详情请参考

于 2012-06-18T16:11:13.123 回答