字符串与正则表达式操作总结
正则表达式是字符串处理中的强大工具。在 JavaScript 中,正则表达式不仅能够帮助我们查找和验证字符串,还能进行替换、拆分等复杂的字符串操作。本文总结了几个常见的字符串正则方法,并进行了优化和补充。
1. split() 方法
split() 方法将字符串分割成数组,可以根据正则表达式进行分割。
let str = 'ajbjjakbdsk1323441';
let reg = /a(([a-z])b)/ig; // i: 忽略大小写,g: 全局匹配
let result = str.split(reg);
console.log(result); // 按正则规则分割字符串
注意:
使用正则时,split() 方法会依据正则表达式中的模式来拆分字符串,并返回一个数组。
2. search() 方法
search() 方法返回字符串中第一个匹配正则表达式的索引位置。如果没有找到匹配项,返回 -1。
let str = 'abc138799022abd197070809';
let reg = /\d{9}/;
let position = str.search(reg);
console.log(position); // 返回数字 138799022 第一个位置
3. replace() 方法
replace() 方法用于替换字符串中的匹配项,可以使用正则表达式来执行替换操作。
let str = 'abc138799022abd197070809';
let reg = /1[3-9]\d{7}/g; // 匹配手机号
let result = str.replace(reg, '电话号码已经更替');
console.log(result); // 将符合的手机号替换为 '电话号码已经更替'
g标志: 用于替换所有匹配项,不加g时,只会替换第一个匹配项。
4. match() 方法
match() 方法返回一个数组,包含所有符合正则表达式的匹配项。
let str = 'abc138799022abd197070809';
let reg = /\d{9}/g; // 匹配所有9位数字
let result = str.match(reg);
console.log(result); // ['138799022', '197070809']
注意:
match() 返回的是一个数组,包含所有匹配的字符串。如果没有找到匹配项,返回 null。
5. matchAll() 方法
matchAll() 方法与 match() 类似,但返回一个 迭代器,需要设置 g 标志才能匹配所有符合条件的项。
let str = 'abc138799022abd197070809';
let reg = /\d{9}/g; // 必须设置全局匹配
let result = str.matchAll(reg);
for (let value of result) {
console.log(value); // 输出每一个匹配项
}
与 match() 的区别:
matchAll()返回的是一个 迭代器,可以用于循环迭代输出匹配的内容。match()仅返回匹配项的数组。
6. 示例:提取和替换符合特定模式的字符串
示例1:提取符合 axc 格式的内容
let str = "abcaccafcacc";
let reg = /a([a-z])c/ig; // 匹配 'axc' 格式,捕获其中的 x
let result = reg.exec(str);
while (result) {
console.log(result[0], result[1]); // 输出匹配的整个字符串和第一个捕获组
result = reg.exec(str); // 执行下一次匹配
}
示例2:提取符合 1[3-9] 开头的手机号
let str = 'abc138799022abd197070809';
let reg = /(1[3-9])\d{7}/g; // 匹配手机号码格式
let result = str.matchAll(reg);
for (let value of result) {
console.log(value); // 输出匹配到的手机号
}
7. 常见问题与优化建议
-
正则表达式标志:
g:全局匹配(匹配所有符合条件的项)。i:忽略大小写(匹配时不区分大小写)。m:多行匹配。
-
捕获组:
捕获组用于提取匹配内容中的特定部分。使用圆括号()来定义捕获组。例如,/(ab)(cd)/会捕获并返回ab和cd两个部分。 -
循环匹配:
在使用exec()或matchAll()方法时,可以通过循环遍历每个匹配结果,逐个处理。
8. 参考示例:处理电话号码替换
let str = 'abc138799022abd197070809';
let reg = /(1[3-9])\d{7}/g; // 匹配手机号
let result = str.replace(reg, '电话号码已更换');
console.log(result); // abc电话号码已更换abd电话号码已更换
通过本文总结的几种常用正则操作方法,你可以更加灵活地处理和操作字符串。正则表达式是开发中必不可少的工具,掌握了它,你会在字符串处理上事半功倍。