JavaScript 正则表达式入门指南:模式与标志
正则表达式(Regular Expression)是处理文本搜索和替换的强大工具。在 JavaScript 中,正则表达式通过 RegExp 对象实现,并与字符串方法深度集成。
正则表达式基础概念
正则表达式由模式(pattern)和可选的标志(flags)组成。模式定义了我们要查找的内容,而标志则控制搜索的行为方式。
两种创建方式
JavaScript 提供了两种创建正则表达式的方式:
- 构造函数语法(动态创建):
let regexp = new RegExp("pattern", "flags");
- 字面量语法(静态创建):
let regexp = /pattern/; // 无标志
let regexp = /pattern/gmi; // 带g、m、i标志
关键区别:
- 字面量语法使用斜杠
/.../
包裹,类似于字符串的引号 - 字面量语法在编写代码时就必须确定内容,不能插入变量
- 构造函数语法可以在运行时动态生成正则表达式
六大标志详解
JavaScript 正则表达式支持6种标志,它们可以单独或组合使用:
-
i
- 不区分大小写/hello/i.test("Hello") // true
-
g
- 全局匹配(查找所有匹配项而非第一个)"a a a".match(/a/g) // ["a", "a", "a"]
-
m
- 多行模式(使^
和$
匹配每行的开头和结尾) -
s
- dotAll模式(使.
匹配包括换行符在内的所有字符) -
u
- 完整Unicode支持(正确处理代理对和Unicode字符) -
y
- 粘性模式(从上次匹配结束的位置开始匹配)
常用正则表达式方法
1. str.match(regexp) - 搜索匹配项
根据是否使用g
标志,返回不同结果:
let str = "Hello hello";
// 有g标志 - 返回所有匹配数组
str.match(/hello/gi); // ["Hello", "hello"]
// 无g标志 - 返回第一个匹配的详细信息
let result = str.match(/hello/i);
/*
result包含:
[
0: "Hello", // 匹配文本
index: 0, // 匹配位置
input: str, // 原始字符串
groups: undefined // 命名捕获组
]
*/
重要注意点:当没有匹配时返回null
而非空数组,处理结果时需特别注意:
// 安全处理方式
let matches = str.match(/not-exist/) || [];
2. str.replace(regexp, replacement) - 替换文本
"JavaScript".replace(/java/i, "Type") // "TypeScript"
替换字符串中可以使用特殊变量:
$&
- 插入整个匹配项$`
- 插入匹配项前的文本$'
- 插入匹配项后的文本$1
,$2
- 插入捕获组内容
3. regexp.test(str) - 测试是否匹配
/hello/i.test("Hello World") // true
实际应用技巧
- 动态创建正则表达式:
let userInput = prompt("输入搜索词", "example");
let regexp = new RegExp(userInput, "gi");
- 转义特殊字符:
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
- 常见验证模式:
// 邮箱验证
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
// 手机号验证
const phoneRegex = /^1[3-9]\d{9}$/;
总结
正则表达式是JavaScript中强大的文本处理工具,掌握它可以:
- 高效验证输入格式
- 快速提取文本信息
- 灵活替换文本内容
- 实现复杂的搜索功能
初学者建议从简单的模式匹配开始,逐步学习更复杂的特性如捕获组、量词和断言等。记住正则表达式虽然强大,但复杂的模式可能难以维护,在可读性和性能之间需要做好平衡。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考