从字符串中提取 HTML 标签名称

Extract an HTML tag name from a string

我想从带有属性的 HTML 标签中提取标签名称。

比如我有这个标签

 <a href="http://chat.whosebug.com" class="js-gps-track"     data-gps-track="site_switcher.click({ item_type:6 })"
>

我需要提取标签名称a

我试过以下正则表达式,但它不起作用。

if ( $raw =~ /^<(\S*).*>$/ ) {
   print " is tag name of string\n";
}

我的代码有什么问题?

您的正则表达式与新行不匹配。你必须使用 s 标志(单行),但由于你的正则表达式是贪婪的,它也不起作用,我也会删除锚点,因为它可能是同一行中的多个标签。

您可以像这样使用正则表达式:

<(\w+)\s+\w+.*?>

Working demo

支持 Borodin 的评论,您不应使用正则表达式来解析 html,因为您可能会遇到解析问题。您可以使用 regex 来解析简单的标签,但如果您的文本带有 <a asdf<as<asdf>df>> 等嵌入标签,则很容易被破坏,在这种情况下,regex 将 wronly 匹配标签 a

这个正则表达式背后的想法是强制标签至少有一个属性

您也可以尝试以下方法;它将匹配标签名称(始终)+ 属性(如果存在)。

\&lt;(?&lt;name>\w+)(?&lt;attributes>\s+[^\>]*|)\>

let matchTagName = (markup) => {
  const pattern = /<([^\s>]+)(\s|>)+/
  return markup.match(pattern)[1]
}

matchTagName("<test>") // "test"
matchTagName("<test attribute>") // "test"
matchTagName("<test-dashed>") // "test-dashed"