我正在尝试获取下面提到的字符串的开始和结束标记之间的内容
<a href="./products/" class="link">Products </a>
<a href="./servicesandsolutions/" class="link">Services & Solution </a>
使用的正则表达式:
<([a-z0-9]+)([^<]+)\*(?:>(.\*?)</\\2>|\\D+/>)
它适用于第一个字符串,但不适用于后一个
我正在尝试获取下面提到的字符串的开始和结束标记之间的内容
<a href="./products/" class="link">Products </a>
<a href="./servicesandsolutions/" class="link">Services & Solution </a>
使用的正则表达式:
<([a-z0-9]+)([^<]+)\*(?:>(.\*?)</\\2>|\\D+/>)
它适用于第一个字符串,但不适用于后一个
根据正则表达式的风格 - 使用前瞻和后瞻方法来获得 > 和 < 即之间的匹配
(?<=>)[^>]*(?=<)
(?<=>)
- 向前看 >
(?=<)
- 在后面寻找一个 <
[^>]*
- 匹配链接本身的文本
lookahead 和 lookbehind 是零宽度匹配,所以只会得到你需要的
为什么这么复杂?不会简单/>([^<]+)</
地捕获元素的内容吗?
只需摆脱标签。
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。
通常你不想用正则表达式解析你自己的 HTML,解析器在这方面做得更好。
假设您使用的是 PCRE,这是对您要查找的表达式的随机猜测:
(?is)<([a-z]+)\b[^<>]*(?:>(.*?)</\1>|/>)
请注意,这不适用于嵌套标签。