返回

正则表达式入门 —— 匹配万千标签的前提

前端

前言

工作中,正则表达式用的可能不是很多,一般使用的时候网上都有现成的实例,很少缺乏比较全面的理解。本文主要以匹配HTML标签为例,简述下正则表达式常用的功能点。

正则表达式的基本语法

正则表达式的声明方式和普通变量的声明方式类似,一般情况下有两种,字面量和正则构造方法RegExp

// 字面量
const regex = /pattern/;

// RegExp构造方法
const regex = new RegExp('pattern');

正则表达式的基本语法包括:

  • 字符组: []内的字符表示匹配其中任何一个字符。例如,/[abc]/可以匹配abc
  • 元字符: 元字符是一个具有特殊含义的字符,例如.(匹配任何字符)、^(匹配字符串的开头)和$(匹配字符串的结尾)。
  • 量词: 量词指定匹配模式出现的次数。例如,+(匹配至少一次)、*(匹配零次或多次)和?(匹配零次或一次)。
  • 分组: 分组使用()将模式的一部分分组。这对于捕获子字符串或重复模式很有用。

匹配HTML标签

现在,我们来看看如何使用正则表达式匹配HTML标签。

// 匹配任何HTML标签
const regex = /<.*?>/;

// 匹配特定的HTML标签,例如`<p>`
const regex = /<p.*?>/;

// 匹配具有特定属性的HTML标签,例如具有`id="content"`属性的`<div>`
const regex = /<div id="content".*?>/;

// 匹配具有特定内容的HTML标签,例如包含"Hello World"的`<p>`
const regex = /<p>Hello World<\/p>/;

正则表达式高级用法

除了基本语法之外,正则表达式还有一些高级用法,可以帮助你匹配更复杂的模式。

  • 后向引用: 后向引用使用\n语法来引用第n个捕获组匹配的子字符串。例如,下面的正则表达式匹配包含相同单词两次的字符串:
const regex = /(.*)\1/;
  • 否定查找: 否定查找使用?!语法来否定一个模式。例如,下面的正则表达式匹配不包含foo的字符串:
const regex = /^(?!.*foo).*/;
  • 条件模式: 条件模式使用(?=pattern)(?!pattern)语法来指定一个必须匹配或不能匹配的模式。例如,下面的正则表达式匹配以a开头且以b结尾的字符串:
const regex = /^a.*b$/;

结语

正则表达式是一个非常强大的工具,可以帮助你匹配各种各样的模式。在本教程中,我们介绍了正则表达式的基本语法和高级用法。希望这些知识能够帮助你入门正则表达式。