返回

ES6的正则表达式扩展:全面认识和熟练使用

前端

正则表达式是一种功能强大的工具,可以用来处理字符串,从简单的查找和替换到复杂的模式匹配。ES6 对正则表达式进行了扩展,增加了许多有用的特性,使正则表达式更加灵活和强大。

正则表达式扩展

unicode 标志

unicode 标志可以用来指定正则表达式应该匹配 unicode 字符。默认情况下,正则表达式只匹配 ASCII 字符。如果需要匹配 unicode 字符,需要在正则表达式前面加上 "u" 标志。

const str = "Hello, 世界!";
const regex = /[\u4e00-\u9fa5]/u;
const result = regex.test(str);
console.log(result); // true

sticky 标志

sticky 标志可以用来指定正则表达式应该从上次匹配结束的位置继续匹配。默认情况下,正则表达式会从字符串的开头开始匹配。如果需要从上次匹配结束的位置继续匹配,需要在正则表达式前面加上 "y" 标志。

const str = "Hello, 世界!Hello, 世界!";
const regex = /Hello/y;
const result1 = regex.exec(str);
console.log(result1); // ["Hello", index: 0, input: "Hello, 世界!Hello, 世界!"]
const result2 = regex.exec(str);
console.log(result2); // ["Hello", index: 13, input: "Hello, 世界!Hello, 世界!"]

dotAll 标志

dotAll 标志可以用来指定正则表达式应该匹配所有字符,包括换行符。默认情况下,正则表达式不匹配换行符。如果需要匹配换行符,需要在正则表达式前面加上 "s" 标志。

const str = "Hello,\n世界!";
const regex = /./s;
const result = regex.test(str);
console.log(result); // true

扩展方法

ES6 为正则表达式对象添加了一些扩展方法,这些方法可以用来方便地操作正则表达式。

  • exec() 方法可以用来执行正则表达式匹配。如果匹配成功,则返回一个数组,其中第一个元素是匹配的字符串,后面的元素是匹配的子字符串。如果匹配失败,则返回 null。
const str = "Hello, 世界!";
const regex = /Hello/;
const result = regex.exec(str);
console.log(result); // ["Hello", index: 0, input: "Hello, 世界!"]
  • test() 方法可以用来测试正则表达式是否匹配字符串。如果匹配成功,则返回 true,否则返回 false。
const str = "Hello, 世界!";
const regex = /Hello/;
const result = regex.test(str);
console.log(result); // true
  • match() 方法可以用来匹配字符串中的所有子字符串。如果匹配成功,则返回一个数组,其中每个元素都是一个匹配的子字符串。如果匹配失败,则返回 null。
const str = "Hello, 世界!";
const regex = /Hello/;
const result = str.match(regex);
console.log(result); // ["Hello"]
  • search() 方法可以用来查找字符串中第一个匹配正则表达式的子字符串。如果匹配成功,则返回匹配的子字符串的索引,否则返回 -1。
const str = "Hello, 世界!";
const regex = /Hello/;
const result = str.search(regex);
console.log(result); // 0
  • replace() 方法可以用来用另一个字符串替换字符串中所有匹配正则表达式的子字符串。
const str = "Hello, 世界!";
const regex = /Hello/;
const result = str.replace(regex, "你好");
console.log(result); // "你好, 世界!"

正则表达式扩展案例

案例一:查找字符串中的所有数字

const str = "1234567890";
const regex = /[0-9]+/g;
const result = str.match(regex);
console.log(result); // ["1234567890"]

案例二:查找字符串中的所有字母

const str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const regex = /[A-Za-z]+/g;
const result = str.match(regex);
console.log(result); // ["ABCDEFGHIJKLMNOPQRSTUVWXYZ"]

案例三:查找字符串中的所有标点符号

const str = ".,!?"