我尝试使用以下Regex从HTML字符串中获取标记名称:
<(.*)(?:\s+(\S*)=.*)?>.*<\/\1?>
以下是我将其应用于:
的一些HTML<p><a href="http://www.quackit.com/html/tutorial/html_links.cfm">Example Link</a></p>
<div class="more-info"><a href="http://www.quackit.com/html/examples/html_links_examples.cfm">More Link Examples...</a></div>
正如所料,我得到p
和div
作为匹配。但由于某种原因,这并没有检测到a
。为什么不呢?
答案 0 :(得分:2)
这是一个RegEx,用于匹配所有HTML标签,具有以下所有可能性:
sorting
说明:
<(?(?=!--)!--[\s\S]*--|(?(?=\?)\?[\s\S]*\?|(?(?=\/)\/[^.-\d][^\/\]'"[!#$%&()*+,;<=>?@^`{|}~ ]*|[^.-\d][^\/\]'"[!#$%&()*+,;<=>?@^`{|}~ ]*(?:\s[^.-\d][^\/\]'"[!#$%&()*+,;<=>?@^`{|}~ ]*(?:=(?:"[^"]*"|'[^']*'|[^'"<\s]*))?)*)\s?\/?))>
答案 1 :(得分:1)
回答“为什么不呢?”: 嵌套的 a标签被认为是。*(任何东西),这意味着你的正则表达式只能匹配第一级标签。 你需要做的是尝试递归地匹配嵌套标签。令人讨厌的是,Javascript没有提供PCRE递归参数(?R),因此处理嵌套问题并不容易。然而,它可以做到。 检查此article