JavaScript正则表达式RegExp创建方式与核心属性方法详解

Ruby
Ruby
发布时间:2026-10-13 | 2人浏览过
原创

在JavaScript中,ECMAScript通过RegExp类型支持正则表达式。本文将深入解析RegExp的两种创建方式、常用标记(Flags)、实例属性含义以及核心的exec()方法,帮助开发者准确掌握并应用正则表达式。

RegExp基础与创建方式

JavaScript中的正则表达式可以通过两种主要方式定义,两者功能等效但语法结构不同。

第1步:使用字面量定义

这是最常用的方式,直接通过斜杠包裹模式来创建:

let expression = /pattern/flags;
  • Pattern:包含具体的匹配规则(字符类、限定符等)。
  • Flags:可选的行为标记,控制正则的执行模式。

第2步:使用RegExp构造函数定义

当正则表达式的模式需要动态生成时,可使用构造函数:

// 创建等效于 /[bc]at/i 的正则
let pattern2 = new RegExp("[bc]at", "i");

注意**:构造函数接收的参数均为String类型。由于字符串本身需要进行转义,因此在构造函数模式下,反斜杠通常需要“二次转义”。例如,若要匹配单个换行符 n,在字面量中写为/\n/,而在构造函数中需写成"\\n"。

第3步:基于现有实例创建

构造函数也可以接受已有的RegExp对象作为第一个参数,从而复制其模式与标记:

const rel = /cat/g;
const re2 = new RegExp(rel);
// re2 同样为 /cat/g

常用的Flags(标记)

标记位于正则表达式的末尾,用于修饰匹配行为:

  • g (global):全局搜索,返回所有匹配而非仅第一个。
  • i (ignoreCase):忽略大小写匹配。
  • m (multiline):多行模式,使^和$匹配每一行的首尾。
  • y (sticky):粘附模式,只从lastIndex指定的位置开始匹配。
  • u (unicode):启用Unicode模式,正确处理大于FFFF的字符。
  • s (dotAll):点通配符.可以匹配包括\n在内的任意字符。

RegExp实例属性

每个RegExp实例都包含描述其模式和状态的属性:

  • source:返回正则表达式的原文字符串(不含两端的斜杠),不包含构造函数的额外转义。
  • flags:返回组合后的标记字符串,如"gi"。
  • global, ignoreCase, multiline, unicode, sticky, dotAll:分别对应各标记的布尔状态。
  • lastIndex:当前执行匹配的位置索引,通常在带g或y标记时使用。

核心方法:exec()

exec()是RegExp提供的主要提取匹配数据的方法,尤其适合配合捕获组使用。它返回一个包含详细信息的数组或null。

let text = 'mom and dad and baby';
let pattern = /mom( and dad(and baby)?)?/gi;
let matches = pattern.exec(text);

console.log(matches.index); // 0, 起始位置
console.log(matches.input); // "mom and dad and baby"
console.log(matches[0]);    // "mom and dad and baby", 完整匹配
console.log(matches[1]);    // " and dad and baby", 第1个捕获组

返回值特征:

  • matches[0]:整个模式的匹配结果。
  • matches[n]:第n个捕获组的匹配内容(若无捕获组则为空)。
  • matches.index:匹配在原字符串中的起始位置。
  • matches.input:原字符串的引用。

元字符转义规则

当需要匹配括号[]、点号.、反斜杠\等特殊字符本身时,必须使用反斜杠进行转义。例如要匹配字面量的"[bc]at",写法如下:

let pattern2 = /\[bc\]at/i;

若使用构造函数,由于\在JS字符串中也是转义符,因此需写成双重反斜杠:new RegExp("\\[bc\\]at", "i")。

以上就是JavaScript通过RegExp使用正则表达式的详细内容,更多关于JavaScript RegExp使用方法与进阶技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表