字符串与正则表达式操作总结

68 阅读4分钟

字符串与正则表达式操作总结

正则表达式是字符串处理中的强大工具。在 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)/ 会捕获并返回 abcd 两个部分。

  • 循环匹配:
    在使用 exec()matchAll() 方法时,可以通过循环遍历每个匹配结果,逐个处理。

8. 参考示例:处理电话号码替换

let str = 'abc138799022abd197070809';
let reg = /(1[3-9])\d{7}/g; // 匹配手机号
let result = str.replace(reg, '电话号码已更换');
console.log(result); // abc电话号码已更换abd电话号码已更换

通过本文总结的几种常用正则操作方法,你可以更加灵活地处理和操作字符串。正则表达式是开发中必不可少的工具,掌握了它,你会在字符串处理上事半功倍。