一文吃透正则表达式

261 阅读3分钟

1. 正则表达式概述

正则表达式(RegEx)是一种用于描述字符串匹配规则的语言,通常用于检索和操作字符串数据。在 JavaScript 中,正则表达式是一个对象,允许你检查字符串是否符合某个模式,或者提取符合条件的部分。

2. 创建正则表达式

在 JavaScript 中,我们可以通过两种方式创建正则表达式:

  • 字面量方式

    let reg = /a/i; // 正则表达式字面量,i表示忽略大小写
    
  • 构造函数方式

    let reg = new RegExp('a', 'i'); // 通过构造函数创建,第二个参数是匹配模式
    

3. 常用正则表达式

  • \w:匹配任意单词字符,等同于 [A-Za-z0-9_]
  • \W:匹配任意非单词字符,等同于 [^A-Za-z0-9_]
  • \d:匹配任意数字,等同于 [0-9]
  • \D:匹配任意非数字,等同于 [^0-9]
  • \s:匹配任意空白字符(如空格、制表符、换行符等)。
  • \S:匹配任意非空白字符。
  • \b:匹配单词边界。
  • \B:匹配非单词边界。

4. 量词(重复匹配规则)

量词用于控制正则表达式中某个部分出现的次数。

  • {m} :匹配恰好 m 次。

    /a{2}/  // 匹配连续出现两次的'a'
    
  • {m,} :匹配至少 m 次。

    /a{2,}/  // 匹配至少出现两次的'a'
    
  • {m,n} :匹配 m 到 n 次。

    /a{2,5}/  // 匹配出现 2 到 5 次的'a'
    
  • + :匹配 1 次或多次。

    /a+/  // 匹配至少 1 次的'a'
    
  • ***** :匹配 0 次或多次。

    /a*/  // 匹配任意数量的'a'(包括零次)
    
  • ? :匹配 0 次或 1 次,相当于 {0,1}

    /a?/  // 匹配 0 次或 1 次的'a'
    

5. 字符集和排除字符集

  • [a-z] :匹配任意小写字母。
  • [A-Z] :匹配任意大写字母。
  • [a-zA-Z] :匹配任意字母。
  • [0-9] :匹配任意数字。
  • [^x] :匹配任意非 x 的字符。

6. 特殊字符

  • . :匹配除了换行符以外的任意字符。

    /./  // 匹配除换行符外的任意字符
    
  • ****:用于转义特殊字符。

    /./  // 匹配字面上的点号'.'
    

7. 正则表达式匹配方法

  • test() :检查字符串是否匹配正则表达式。

    let str = 'abc';
    let reg = /abc/;
    console.log(reg.test(str));  // true
    
  • exec() :返回与正则匹配的结果。

    let result = reg.exec(str); // 返回匹配的数组或 null
    

8. 示例

1. 简单正则匹配

let reg = /a/i; // 匹配 'a' 或 'A'
let str = 'a';
let result = reg.test(str);
console.log(result);  // true

let str1 = 'b';
let result1 = reg.test(str1);
console.log(result1);  // false

2. 使用字符集和排除字符集

let reg = /[a-z]/; // 匹配任意小写字母
let str = 'abc';
console.log(reg.test(str));  // true

reg = /[^a-z]/; // 匹配任意非小写字母
console.log(reg.test('1'));  // true

3. 使用量词

let reg = /a{2}/;  // 匹配恰好两次'a'
let str = 'aabcda';
console.log(reg.test(str));  // true

reg = /a{1,}/;  // 匹配至少一次'a'
console.log(reg.test(str));  // true

str = 'abcvv';
reg = /a+/;  // 匹配至少一次'a'
console.log(reg.test(str));  // true

str = 'bcvv';
console.log(reg.test(str));  // false

4. 特殊匹配

let reg = /./; // 匹配点号'.'
console.log(reg.test('abc.'));  // true

reg = /\d+/; // 匹配一个或多个数字
console.log(reg.test('123'));  // true

str = 'abckkAAA';
reg = /[^a-z]/i;  // 匹配非字母字符(忽略大小写)
console.log(reg.test(str));  // false

str = '\n';
reg = /./;  // 匹配换行外的任意字符
console.log(reg.test(str));  // false

reg = /^a$/;  // 匹配只有'a'的字符串
str = 'abc';
console.log(reg.test(str));  // false
str = 'a';
console.log(reg.test(str));  // true

通过这个笔记,你可以快速掌握正则表达式的基础语法、使用方法以及一些常见的匹配规则。在实际开发中,正则表达式常常用于字符串的验证、查找和替换等操作。