匹配除了自包含的XHTML标签之外的开放HTML标签的正则表达式

匹配除了自包含的XHTML标签之外的开放HTML标签的正则表达式

在本文中,我们将学习创建一个正则表达式模式,该模式可以匹配HTML中的开放标签,但排除自包含的XHTML标签。

我们可以使用正则表达式(RegEx)来匹配开放的标签,排除XHTML中自包含的标签(例如<br/>,<img />)。这可以通过创建一个模式来实现,该模式匹配以标签名开始的尖括号,但排除某些不需要闭合标签的XHTML中的标签。可以根据具体要求和HTML结构来定制模式。

以下是实现这一目标的一些常见方法:

  • 使用负向预查
  • 使用HTML标签白名单
  • 使用DOM解析

方法1:使用负向预查

负向预查允许我们指定在字符串中当前位置之后不应出现的模式。

语法:

Regular Expression Pattern: <([a-zA-Z]+)(?
![^>]*\/>)>
JavaScript

示例: 在此示例中,我们使用上面解释的方法。

Javascript

const regex = /<([a-zA-Z]+)(?
![^>]*\/>)>/; 

const inputString =  
    '<div><br/><p>Hello</p><span>World</span></div>'; 
const matches = inputString.match(regex); 
  
console.log(matches);
JavaScript

输出

[
  '<div>',
  'div',
  index: 0,
  input: '<div><br/><p>Hello</p><span>World</span></div>',
  groups: undefined
]
JavaScript

方法2:使用HTML标签的白名单

另一种方法是创建一个HTML标签的白名单,其中包含被认为是有效开放标签的标签,并与该列表进行匹配。

语法:

Regular Expression Pattern: <(div|p|span|...)>
JavaScript

例子: 在这个例子中,我们使用上面解释的方法。

JavaScript

const regex = /<(div|p|span)>/; 
const inputString =  
    '<div><br/><p>Hello</p><span>World</span></div>'; 
const matches = inputString.match(regex); 
  
console.log(matches);
JavaScript

输出

[
  '<div>',
  'div',
  index: 0,
  input: '<div><br/><p>Hello</p><span>World</span></div>',
  groups: undefined
]
JavaScript

方法3:使用DOM解析

DOM解析器是一个内置于HTML/XML字符串中的JavaScript实用工具,它将它们转换为结构化的文档对象模型(DOM)表示,从而简化了对文档内容的导航和操作。

语法:

parseFromString(string, mimeType);
JavaScript

示例: 在这个示例中,我们使用了上面解释的方法。

JavaScript

// Example HTML input 
const Data = 
    '<div class="container"><p>Hello, <span>world!</span></p></div>'; 
  
// Create a DOM parser 
const parser = new DOMParser(); 
  
// Parse the HTML string 
const inputElement = parser.parseFromString(Data, 'text/html'); 
  
// Get all elements 
const elements = inputElement.getElementsByTagName('*'); 
  
// Filter open tags 
const matches = Array.from(elements).filter((element) => 
    element.outerHTML.match(/<([A-Za-z][A-Za-z0-9]*)\b(?
![^>]*\/>)/)); 

  
// Output the matched open tags 
console.log(matches);
JavaScript

输出:

(6)   
0: html  
1: head  
2: body  
3: div.container  
4: p  
5: span  
JavaScript

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册