正则表达式快速 – JavaScript Regex(初学者到专业)
Source: Dev.to
请提供您希望翻译的文章正文内容(除代码块和 URL 之外的文字),我将为您翻译成简体中文并保持原有的格式、Markdown 语法以及技术术语不变。
什么是正则表达式?
**正则表达式(regex)**是一种用于匹配文本的模式。
在 JavaScript 中,正则表达式主要用于字符串:
const text = "hello world";
text.match(/world/); // ['world']
你可以使用以下语法定义正则表达式模式:
/pattern/flags
示例
/hello/i
hello→ 模式i→ 标志(不区分大小写)
正则表达式工作原理(思维模型)
正则表达式 从左到右,逐字符匹配。
- 引擎读取字符串。
- 它尝试匹配你的模式。
- 当匹配失败或成功时停止。
没有神秘——只有规则。
在 JavaScript 中创建正则表达式
-
字面量语法(最常用)
const regex = /abc/; -
构造函数语法(动态模式)
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} | 在 n 与 m 之间 |
示例
/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/
匹配 cat 或 dog。
标志
| 标志 | 含义 |
|---|---|
g | 全局 |
i | 不区分大小写 |
m | 多行 |
s | 点匹配换行符 |
u | Unicode(Unicode) |
y | 粘性 |
示例
/hello/gi
前瞻与后顾
正向前瞻
/\d(?=px)/ // 数字后面跟着 "px"
负向前瞻
/\d(?!px)/ // 数字 **不是** "px"
后顾(现代 JS)
如果你精通正则表达式,文本就不再混乱。
它会变得结构化,而这项技能将受益终生。
关注获取更多! @mahmud‑r‑farhan
联系: https://gravatar.com/floawd