HTML 正则表达式

HTML 正则表达式

HTML 中,往往需要针对标签、属性等进行文本处理或者字符串匹配。这时候我们就需要用到正则表达式(RegExp)。

经常会用到的重复匹配字符,在正则表达式中可以用以下方式来表示:

符号 描述
* 匹配前面的表达式任意次
+ 匹配前面的表达式至少 1 次
? 匹配前面的表达式 0 次或 1 次
{n} 匹配前面的表达式恰好 n 次
{n,} 匹配前面的表达式至少 n 次
{n,m} 匹配前面的表达式至少 n 次,至多 m 次

HTML 中,经常需要匹配的标签和属性有很多,以下是一些实际应用例子:

匹配 img 标签的 src 属性

<img src="https://example.com/image.jpg">
const img = '<img src="https://example.com/image.jpg">';
const pattern = /<img.+?src="(.*?)"/;
const src = img.match(pattern)[1];
console.log(src); // https://example.com/image.jpg

匹配 a 标签的 href 属性

<a href="https://example.com">Example</a>
const a = '<a href="https://example.com">Example</a>';
const pattern = /<a.+?href="(.*?)"/;
const href = a.match(pattern)[1];
console.log(href); // https://example.com

匹配 p 标签内的文本内容

<p>Hello World!</p>
const p = '<p>Hello World!</p>';
const pattern = /<p>(.*?)<\/p>/;
const text = p.match(pattern)[1];
console.log(text); // Hello World!

匹配 html 标签中的 lang 属性

<html lang="en">
const html = '<html lang="en">';
const pattern = /<html.+?lang="(.*?)"/;
const lang = html.match(pattern)[1];
console.log(lang); // en

其中的 .+? 表示任意字符重复 1 次或 1 次以上,且取最小长度。

如果要匹配的标签或属性稍微复杂一些,我们还可以使用正则表达式中的分组符 (),同时用 ?| 进行条件匹配。

匹配特定的 div 标签

<div class="container">Hello World!</div>
const div = '<div class="container">Hello World!</div>';
const pattern = /<div class="container">(.+?)<\/div>/;
const text = div.match(pattern)[1];
console.log(text); // Hello World!

匹配包含指定属性的所有标签

<div class="container">Hello World!</div>
<div class="header">Header</div>
<div class="footer">Footer</div>
const html = '<div class="container">Hello World!</div><div class="header">Header</div><div class="footer">Footer</div>';
const pattern = /<div.+?class="([^"]+)".*?>/;
const matches = html.matchAll(pattern);
for (const match of matches) {
  console.log(match[1]); // container header footer
}

这里使用了 matchAll 方法来获取所有匹配结果。

结论

在 HTML 文本处理和字符串匹配中,正则表达式是非常重要的工具。通过灵活使用基础正则匹配符和分组、条件匹配等高级技巧,我们可以很方便地完成绝大多数工作。需要注意的是,在编写正则表达式时,一定要注意贪婪匹配和最小匹配的区别,以及特殊字符需要进行转义的问题,否则可能导致匹配失败。需要不断练习,逐渐掌握正则表达式的使用技巧。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程