正则表达式快速 – JavaScript Regex(初学者到专业)

发布: (2025年12月18日 GMT+8 12:29)
4 min read
原文: Dev.to

Source: Dev.to

请提供您希望翻译的文章正文内容(除代码块和 URL 之外的文字),我将为您翻译成简体中文并保持原有的格式、Markdown 语法以及技术术语不变。

什么是正则表达式?

**正则表达式(regex)**是一种用于匹配文本的模式。

在 JavaScript 中,正则表达式主要用于字符串:

const text = "hello world";
text.match(/world/); // ['world']

你可以使用以下语法定义正则表达式模式:

/pattern/flags

示例

/hello/i
  • hello → 模式
  • i → 标志(不区分大小写)

正则表达式工作原理(思维模型)

正则表达式 从左到右,逐字符匹配。

  1. 引擎读取字符串。
  2. 它尝试匹配你的模式。
  3. 当匹配失败或成功时停止。

没有神秘——只有规则。

在 JavaScript 中创建正则表达式

  1. 字面量语法(最常用)

    const regex = /abc/;
  2. 构造函数语法(动态模式)

    const word = "abc";
    const regex = new RegExp(word);

    仅在模式必须是动态时才使用构造函数。

JavaScript 中常用的正则表达式方法

方法描述示例
test()返回 true / false/abc/.test("abc123"); // true
match()返回匹配结果"abc123".match(/abc/);
replace()替换匹配的文本"hello world".replace(/world/, "JS");
search()返回匹配项的索引"hello".search(/e/); // 1

字符和字面量

基本匹配

/hello/   // 匹配 "hello"

Regex is case‑sensitive by default.

/hello/i  // 匹配 "Hello", "HELLO", 等等

特殊字符(元字符)

这些字符具有特殊含义:

. ^ $ * + ? ( ) [ ] { } | \

要字面匹配它们,使用 \\ 转义

/\./  // matches a dot

字符类 [ ]

匹配 集合中的单个字符

/[abc]/   // a 或 b 或 c
/[0-9]/   // 任意数字
/[a-z]/   // 小写字母
/[A-Z]/   // 大写字母

取反

/[^0-9]/  // 不是数字

简写字符类

模式含义
\d数字 (0–9)
\D非数字
\w单词字符 (a–z, A–Z, 0–9, _)
\W非单词字符
\s空白字符
\S非空白字符

示例

/\d+/.test("123"); // true

量词(多少?)

量词控制重复。

符号含义
*0 次或更多
+1 次或更多
?0 次或 1 次
{n}正好 n
{n,}n 次或更多
{n,m}nm 之间

示例

/a*/    // "", "a", "aaaa"
 /a+/    // "a", "aaaa"
 /a{2}/  // "aa"

贪婪 vs. 懒惰匹配

正则默认是贪婪的

"test".match(/.+/);
// matches "test"

懒惰版本

"test".match(/.+?/);
// matches ""

在量词后添加 ? 使其变为懒惰匹配。

锚点 ^$

锚点匹配 位置,而不是字符。

/^hello/   // starts with "hello"
/world$/  // ends with "world"

用于验证。

Groups ( )

分组让你能够捕获匹配的部分。

const result = "2025-12-18".match(/(\d{4})-(\d{2})-(\d{2})/);
result[1]; // "2025" (year)
result[2]; // "12"   (month)
result[3]; // "18"   (day)

Non‑capturing group

/(?:abc)+/

交替 |(或)

/cat|dog/

匹配 catdog

标志

标志含义
g全局
i不区分大小写
m多行
s点匹配换行符
uUnicode(Unicode)
y粘性

示例

/hello/gi

前瞻与后顾

正向前瞻

/\d(?=px)/   // 数字后面跟着 "px"

负向前瞻

/\d(?!px)/   // 数字 **不是** "px"

后顾(现代 JS)

如果你精通正则表达式,文本就不再混乱。
它会变得结构化,而这项技能将受益终生。

关注获取更多! @mahmud‑r‑farhan
联系: https://gravatar.com/floawd

Back to Blog

相关文章

阅读更多 »

了解 Regex:最简指南

Regex 正则表达式是让许多开发者头疼的话题之一。但事实是:Regex 并不难——你只需要理解……

JavaScript 中的函数

什么是函数?函数是一段用于执行特定任务的代码块。只有在被调用时才会运行。javascript function add { console.log'He...