JavaScript 正则表达式

栏目: Javascript 发布时间:2024-11-05

正则表达式(Regular Expressions,简称 RegEx 或 Regex)是一种强大的文本处理工具,它使用一种特殊的字符序列来定义搜索模式。这些模式可以用于搜索、替换或解析字符串中的文本。JavaScript 通过其 RegExp 对象提供了对正则表达式的支持。

一、正则表达式基础

  1. 字面量语法与构造函数语法

    • 字面量语法:/pattern/flags

    • 构造函数语法:new RegExp(pattern, flags)

    let regex1 = /abc/; // 字面量语法
    let regex2 = new RegExp('abc'); // 构造函数语法
    
  2. 简单模式

    • 正则表达式可以包含普通字符(如字母、数字)和特殊字符(如 .*? 等)。

    • 普通字符匹配它们自身。

    let regex = /hello/;
    console.log(regex.test('hello world')); // true
    
  3. 特殊字符

    • .:匹配除换行符之外的任何单个字符。

    • *:匹配前面的子表达式零次或多次。

    • +:匹配前面的子表达式一次或多次。

    • ?:匹配前面的子表达式零次或一次。

    • {n}:匹配前面的子表达式恰好 n 次。

    • {n,}:匹配前面的子表达式至少 n 次。

    • {n,m}:匹配前面的子表达式至少 n 次,但不超过 m 次。

    let regex = /ab{2}c/; // 匹配 "abbc"
    console.log(regex.test('abbc')); // true
    
  4. 字符类

    • [abc]:匹配方括号内的任一字符。
    • [^abc]:匹配不在方括号内的任一字符。
    • [a-z]:匹配指定范围内的任一字符。
    • [^a-z]:匹配不在指定范围内的任一字符。
    let regex = /[a-z]/; // 匹配任何小写字母
    console.log(regex.test('A')); // false
    console.log(regex.test('a')); // true
    
  5. 锚点

    • ^:匹配输入字符串的开始位置。
    • $:匹配输入字符串的结束位置。
    let regex = /^hello/; // 匹配以 "hello" 开头的字符串
    console.log(regex.test('hello world')); // true
    console.log(regex.test('world hello')); // false
    

二、进阶用法

  1. 分组与捕获

    • ():用于分组和捕获匹配的子字符串。
    • (?:...):非捕获分组。
    let regex = /(\d{4})-(\d{2})-(\d{2})/;
    let match = regex.exec('2023-10-05');
    console.log(match[1]); // "2023"
    console.log(match[2]); // "10"
    console.log(match[3]); // "05"
    
  2. 反向引用

    • \n:其中 n 是一个数字,表示对前面第 n 个捕获组的引用。
    let regex = /(\w+)\s\1/; // 匹配重复的单词
    console.log(regex.test('hello hello')); // true
    console.log(regex.test('hello world')); // false
    
  3. 选择、断言与懒惰匹配

    • |:选择运算符,匹配左边或右边的表达式。
    • (?=...):正向肯定断言。
    • (?!...):正向否定断言。
    • *?+?{n,m}?:懒惰匹配(尽可能少地匹配字符)。
    let regex = /foo.*?bar/; // 懒惰匹配 "foo" 和 "bar" 之间的任意字符
    console.log(regex.test('foobar')); // true
    console.log(regex.test('foo123bar')); // true,但只匹配到 "foo123bar" 中的 "foo123b"
    

三、标志(Flags)

  • i:忽略大小写。
  • g:全局搜索。
  • m:多行搜索。
  • s:允许 . 匹配换行符(ES2018 引入)。
  • u:启用 Unicode 完全匹配(ES6 引入)。
  • y:粘性匹配(从目标字符串的当前位置开始匹配,ES6 引入)。
let regex = /hello/gi; // 忽略大小写并全局搜索 "hello"
let str = 'Hello world! HELLO WORLD!';
let matches = str.match(regex);
console.log(matches); // ["Hello", "HELLO"]

四、在 JavaScript 中使用正则表达式

  • RegExp.prototype.test(str):测试字符串是否匹配正则表达式。
  • String.prototype.match(regex):使用正则表达式匹配字符串,并返回一个数组(包含匹配结果)。
  • String.prototype.search(regex):使用正则表达式搜索字符串,并返回匹配项的索引。
  • String.prototype.replace(regex, replacement):使用正则表达式替换字符串中的匹配项。
  • String.prototype.split(regex, limit):使用正则表达式分割字符串。
let str = 'The quick brown fox jumps over the lazy dog.';
let regex = /\s+/; // 匹配一个或多个空格
let words = str.split(regex);
console.log(words); // ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog."]

五、总结

正则表达式是处理字符串的强大工具,它们可以大大简化复杂的文本搜索、替换和解析任务。通过掌握正则表达式的基础和进阶用法,以及如何在 JavaScript 中使用它们,你可以编写出更高效、更简洁的代码。记住,正则表达式的学习是一个渐进的过程,通过不断的实践和应用,你会逐渐掌握它们的精髓。

本文地址:https://www.tides.cn/p_js-regexp

标签: 前端教程