JavaScript 正则表达式常用方法详解

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

正则表达式(RegExp)是用于处理字符串的强大工具,相比传统的字符遍历循环,它更加简洁高效。本文将系统介绍 JavaScript 中正则表达式的两种创建方式,并深入解析 test、search、match 和 replace 四个核心方法的用法、常见误区及代码实现。

为什么选择正则表达式?

在处理字符串时,开发者常面临提取特定内容(如连续数字、特定字符)的需求。以下对比展示了传统逻辑与正则处理的差异:

传统循环提取数字

若需从混合字符串中分离出连续的数字块(如将 'dgh6a567sdo23ujaloo932' 转为 ['6', '567', '23', '932']),使用原生循环需要维护临时变量状态,代码冗长且易错。

function getNumber(obj) {
  var arr = [];
  var temp = '';
  for (var i = 0; i < obj.length; i++) {
    // 判断是否为数字
    if (obj.charAt(i) >= '0' && obj.charAt(i) <= '9') {
      temp += obj.charAt(i); // 累积相邻数字
    } else {
      // 数字断开时,将累积结果存入数组
      if (temp) {
        arr.push(temp);
        temp = '';
      }
    }
  }
  // 处理末尾可能遗留的数字串
  if (temp) {
    arr.push(temp);
  }
  return arr;
}

正则表达式方案

利用正则表达式,仅需一行代码即可完成相同逻辑:

function getNumber2(obj) {
  var re = /\d+/g; // \d 表示数字,+ 表示至少出现一次,g 表示全局匹配
  return obj.match(re);
}

正则表达式专为高效处理字符串模式设计,语法更紧凑,逻辑更清晰。正则对象可通过字面量或构造函数创建:

  • 字面量:var re = /pattern/flags;
  • 构造函数:var re = new RegExp('pattern', 'flags');

正则表达式核心方法详解

第1步:使用 re.test() 进行条件验证

功能:测试字符串是否包含匹配的模式。若匹配成功返回 true,否则返回 false。

语法:regExp.test(string)

要点: - /\D/ 匹配非数字字符。若字符串中存在非数字字符,则说明不全是数字。 - 该方法常用于表单验证等布尔判断场景。

// 判断字符串是否全为数字
var str = '123456';
var re = /\D/; // 匹配任意非数字字符
if (!re.test(str)) {
  console.log('全是数字');
} else {
  console.log('含有非数字字符');
}

第2步:使用 str.search() 查找位置

功能:返回字符串中第一个匹配项的索引位置,未找到返回 -1。功能类似于 indexOf,但支持正则。

语法:string.search(regExp)

注意:
- 默认区分大小写。若要忽略大小写,需添加标志 i。
- 仅返回首次匹配的位置,不支持全局搜索所有位置。

var str = 'dgh6b567';
// 查找字符 'b',不区分大小写
var result = str.search(/b/i);
console.log(result); // 输出匹配到的索引值

第3步:使用 str.match() 提取内容

功能:查找匹配项并返回包含匹配结果的数组。若未找到返回 null。

语法:string.match(regExp)

关键差异分析:

  • 不加 g 标志:匹配成功后立即停止,只返回第一个匹配项及其捕获组信息(数组形式)。
  • 加上 g 标志(全局):返回所有匹配成功的片段组成的数组。
  • 量词 +:表示前面的元素至少出现一次,适合提取连续变化的内容(如多个连续数字)。
var str = 'dgh6a567sdo23';

// 1. 无全局匹配:只取第一个数字 '6'
console.log(str.match(/\d/)); // ['6', index: 3]

// 2. 全局匹配单个数字:取出每个独立数字
console.log(str.match(/\d/g)); // ['6', '5', '6', '7', '2', '3']

// 3. 全局匹配2位数字:取出连续的两位数
console.log(str.match(/\d\d/g)); // ['56', '23']

// 4. 全局匹配+号:取出所有连续数字块
console.log(str.match(/\d+/g)); // ['6', '567', '23']

第4步:使用 str.replace() 替换内容

功能:用新字符串替换匹配到的旧字符串。

语法:string.replace(regExp, newString)

注意:
- 默认情况下,replace 只替换第一次出现的匹配项。 - 若要替换所有匹配项,必须使用 g 标志。

var str = 'daah6b5a7';
// 将所有 'a' 替换为 'b'
var result = str.replace(/a/g, 'b');
console.log(result); // 'dbbh6b5b7'

总结

正则表达式通过预定义的元字符(如 d, w, s)和修饰符(i, g, m),极大地简化了字符串处理逻辑。掌握 test、search、match 和 replace 四种方法的特性,尤其是 g 标志对行为的影响,是编写高质量 JS 代码的关键。以上就是 JavaScript 正则表达式基础知识的详细内容,更多关于 JavaScript 正则表达式进阶的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。