在 Javascript 中使用正则表达式的过程中,你可能会遇到引用之前匹配到的字符串的情况。

JS 正则表达式中引用之前匹配的字符串组分为两种情况:

  • 在当前正则表达式内引用之前匹配的字符串组

  • 在当前正则表达式外引用之前匹配的字符串组

本文将讲解两种情况下如何引用之前的字符串组。

前提条件

1、在正则表达式内你需要使用捕获括号,捕获子字符串。

var re = /a(b+)c/;

2、你需要确定捕获字符串的计数,捕获字符串以开始括号(左括号)的从左向右的顺序为其计数,从 1 开始。

var re = /a(b+(c+)(d+))e/;

第 1 个捕获字符换为 (b+(c+)(d+)) 匹配到的内容,第 2 个捕获字符换为 (c+) 匹配到的内容,第 3 个捕获字符换为 (d+) 匹配到的内容。

JS 当前正则表达式内引用组

该种形式在处理 html 或 xml 文件中经常使用。

Javascript 在当前正则表达式内引用之前匹配的字符串组,需要使用 \n,此处的 n 需要替换为一个正整数,该值为捕获字符串的计数。

Javascript 在当前正则表达式内引用之前匹配的字符串组示例:

let pRe = /<(p)>(.*?)<\/\1>/smg;

该示例为匹配 html p 标签的内容

JS 当前正则表达式外引用组

Javascript 在当前正则表达式外引用之前匹配的字符串组,需要使用 $n,此处的 n 需要替换为一个正整数,该值为捕获字符串的计数。

Javascript 在当前正则表达式外引用之前匹配的字符串组示例:

var s = "abbabbbabbbb"
s = s.replaceAll(/(a(b+))/, "$2");

该语句的作用是把以 a 开头,以 b 结尾的字符串全部替换为 b

结语

本文分在当前正则表达式内引用之前匹配的字符串组、在当前正则表达式外引用之前匹配的字符串组两种情况介绍了如何在 Javascript 正则表达式中引用之前匹配的字符串组。