js正则表达式总结
学习 JavaScript 中的正则表达式(RegExp)可以帮助你处理字符串匹配、替换等复杂操作。以下是一个简明的学习指南,涵盖正则表达式的基础知识和常见用法。
1. 正则表达式的基本语法
正则表达式的基本构建块包括字符、元字符、字符类、量词、分组与捕获、定位符等。
基本字符
- 普通字符: 匹配它们本身。例如,
abc匹配"abc"。 - 转义字符: 用反斜杠 `` 进行转义。例如,
\d匹配任何数字,\w匹配任何单词字符。
元字符
.: 匹配除换行符之外的任何单个字符。\d: 匹配任何数字(相当于[0-9])。\D: 匹配任何非数字字符(相当于[^0-9])。\w: 匹配任何字母、数字、下划线字符(相当于[a-zA-Z0-9_])。\W: 匹配任何非字母、数字、下划线字符(相当于[^a-zA-Z0-9_])。\s: 匹配空白字符(空格、制表符等)。\S: 匹配非空白字符。
字符类
[abc]: 匹配a、b或c中的任意一个字符。[^abc]: 匹配不在a、b、c之中的任意字符。[a-z]: 匹配从a到z的任意字符。
量词
*: 匹配前一个元素0次或多次。+: 匹配前一个元素1次或多次。?: 匹配前一个元素0次或1次。{n}: 精确匹配前一个元素n次。{n,}: 匹配前一个元素至少n次。{n,m}: 匹配前一个元素n到m次。
分组与捕获
(abc): 匹配并捕获abc。(?:abc): 匹配但不捕获abc(非捕获组)。(a|b): 匹配a或b。
定位符
^: 匹配字符串的开头。$: 匹配字符串的结尾。\b: 匹配单词边界。\B: 匹配非单词边界。-
2. 常见操作
匹配操作
test(): 测试一个字符串是否匹配某个模式,返回true或false。
const regex = /\d/;
console.log(regex.test('abc123')); // 输出: true
match(): 返回匹配结果的数组或null。
const str = 'abc123';
const result = str.match(/\d+/); // 匹配一个或多个连续的数字
console.log(result); // 输出: ["123"]
替换操作
replace(): 查找并替换匹配的子字符串
const str = 'abc123';
const newStr = str.replace(/\d+/g, ''); // 移除所有数字
console.log(newStr); // 输出: "abc"
分割操作
split(): 根据正则表达式分割字符串。
const str = 'a,b,c,d';
const arr = str.split(/,/); // 使用逗号分割字符串
console.log(arr); // 输出: ["a", "b", "c", "d"]
3. 实战示例
验证电子邮件地址
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
console.log(emailRegex.test('test@example.com')); // 输出: true
提取 URL 中的查询参数
const url = 'https://example.com?page=2&sort=desc';
const params = {};
url.replace(/([^?&=]+)=([^&]+)/g, (_, key, value) => {
params[key] = value;
});
console.log(params); // 输出: { page: "2", sort: "desc" }
总结:正则表达式虽然一开始看上去有些复杂,但随着练习,你会逐渐掌握它的强大功能。可以从简单的正则表达式开始,然后逐渐尝试更多复杂的匹配模式。