为什么我的正则表达式不能让HTML标记名起作用?

时间:2017-07-03 09:39:25

标签: javascript html regex

我尝试使用以下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>

正如所料,我得到pdiv作为匹配。但由于某种原因,这并没有检测到a。为什么不呢?

2 个答案:

答案 0 :(得分:2)

这是一个RegEx,用于匹配所有HTML标签,具有以下所有可能性:

sorting

说明:

<(?(?=!--)!--[\s\S]*--|(?(?=\?)\?[\s\S]*\?|(?(?=\/)\/[^.-\d][^\/\]'"[!#$%&()*+,;<=>?@^`{|}~ ]*|[^.-\d][^\/\]'"[!#$%&()*+,;<=>?@^`{|}~ ]*(?:\s[^.-\d][^\/\]'"[!#$%&()*+,;<=>?@^`{|}~ ]*(?:=(?:"[^"]*"|'[^']*'|[^'"<\s]*))?)*)\s?\/?))>

答案 1 :(得分:1)

回答“为什么不呢?”: 嵌套的 a标签被认为是。*(任何东西),这意味着你的正则表达式只能匹配第一级标签。 你需要做的是尝试递归地匹配嵌套标签。令人讨厌的是,Javascript没有提供PCRE递归参数(?R),因此处理嵌套问题并不容易。然而,它可以做到。 检查此article