我正在尝试获取下面提到的字符串的开始和结束标记之间的内容
<a href="./products/" class="link">Products </a>
<a href="./servicesandsolutions/" class="link">Services & Solution </a>
使用正则表达式:
<([a-z0-9]+)([^<]+)\*(?:>(.\*?)</\\2>|\\D+/>)
它适用于第一个字符串,但不适用于后一个字符串
答案 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)