从字符串中提取 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+.*?>
支持 Borodin 的评论,您不应使用正则表达式来解析 html,因为您可能会遇到解析问题。您可以使用 regex 来解析简单的标签,但如果您的文本带有 <a asdf<as<asdf>df>>
等嵌入标签,则很容易被破坏,在这种情况下,regex 将 wronly 匹配标签 a
这个正则表达式背后的想法是强制标签至少有一个属性
您也可以尝试以下方法;它将匹配标签名称(始终)+
属性(如果存在)。
\<(?<name>\w+)(?<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"
我想从带有属性的 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+.*?>
支持 Borodin 的评论,您不应使用正则表达式来解析 html,因为您可能会遇到解析问题。您可以使用 regex 来解析简单的标签,但如果您的文本带有 <a asdf<as<asdf>df>>
等嵌入标签,则很容易被破坏,在这种情况下,regex 将 wronly 匹配标签 a
这个正则表达式背后的想法是强制标签至少有一个属性
您也可以尝试以下方法;它将匹配标签名称(始终)+
属性(如果存在)。
\<(?<name>\w+)(?<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"