正则表达式(Regular Expressions,简称 regex 或 RegEx)是用于匹配、查找、替换字符串的强大工具。它为字符串的搜索、匹配、提取等操作提供了一种标准的语法和方式。正则表达式可以用来验证输入、搜索内容、替换字符串等。

下面是正则表达式的基础教程,涵盖常见的符号、元字符、修饰符等。

1. 正则表达式的基本语法

字面量字符

正则表达式中最基本的形式是直接使用字面量字符来匹配字符串中的字符。例如:

  • /abc/ 会匹配包含 “abc” 的文本。

元字符

元字符是正则表达式中的特殊字符,它们具有特定的含义。

  • .:匹配除换行符外的任何单个字符
  • ^:匹配输入的开始位置
  • $:匹配输入的结束位置
  • []:表示字符集合,匹配其中的任何一个字符
  • |:表示“或”操作,匹配左右任意一个表达式
  • ():用于分组,捕获匹配内容

2. 常见的字符类

  • \d:匹配任何数字字符,等价于 [0-9]
  • \D:匹配任何非数字字符,等价于 [^0-9]
  • \w:匹配任何字母、数字或下划线,等价于 [A-Za-z0-9_]
  • \W:匹配任何非字母、数字或下划线,等价于 [^A-Za-z0-9_]
  • \s:匹配任何空白字符(包括空格、制表符、换行符等)
  • \S:匹配任何非空白字符

3. 定位符

  • ^:匹配输入字符串的开始。例如,/^abc/ 匹配以 “abc” 开头的字符串。
  • $:匹配输入字符串的结束。例如,/abc$/ 匹配以 “abc” 结尾的字符串。

4. 重复匹配符

  • *:匹配前一个字符零次或多次。例如,a*b 会匹配 “b”、”ab”、”aaab” 等。
  • +:匹配前一个字符一次或多次。例如,a+b 会匹配 “ab”、”aab”、”aaab” 等。
  • ?:匹配前一个字符零次或一次。例如,a?b 会匹配 “b” 和 “ab”。
  • {n}:匹配前一个字符恰好 n 次。例如,a{3} 会匹配 “aaa”。
  • {n,}:匹配前一个字符至少 n 次。例如,a{2,} 会匹配 “aa”、”aaa”、”aaaa” 等。
  • {n,m}:匹配前一个字符至少 n 次,最多 m 次。例如,a{2,4} 会匹配 “aa”、”aaa” 和 “aaaa”。

5. 特殊字符与转义字符

有些字符在正则表达式中具有特殊含义,需要使用反斜杠 \ 来转义,使其表示字面量字符。

例如:

  • \.:匹配一个点 .,而不是任意字符。
  • \\:匹配反斜杠 \

6. 分组和捕获

  • (abc):括号用于分组,表示整个括号中的内容是一个单独的组。
    • 可以使用 \1\2 等来引用之前的捕获组。
  • (?:abc):非捕获分组,用于分组但不捕获匹配内容。

7. 量词

量词用于指定某个元素的出现次数。

  • *:表示零次或多次
  • +:表示一次或多次
  • ?:表示零次或一次
  • {n}:表示恰好 n 次
  • {n,}:表示至少 n 次
  • {n,m}:表示 n 次到 m 次

8. 示例:常见的正则表达式

  • 匹配邮箱地址^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
    • 这个正则表达式匹配标准的电子邮件地址,如 user@example.com
  • 匹配电话号码(美国格式)^\(\d{3}\) \d{3}-\d{4}$
    • 例如,(123) 456-7890
  • 匹配 URL^https?:\/\/(www\.)?[a-zA-Z0-9-]+\.[a-zA-Z]{2,}$
    • 匹配以 http 或 https 开头的网址。

9. 正则表达式的常见用法

  • 验证输入
    用正则表达式来验证用户输入是否合法。例如,检查输入的密码是否符合要求(长度、字符种类等)。
  • 搜索和替换
    • 使用 String.prototype.replace() 方法和正则表达式进行字符串替换。
    • 例如,将文本中的所有数字替换为 #let text = "My phone number is 123-456-7890"; let newText = text.replace(/\d/g, "#"); console.log(newText); // "My phone number is ###-###-####"
  • 分割字符串
    使用 String.prototype.split() 方法和正则表达式将字符串分割成数组。例如,按空白字符分割字符串:let str = "apple orange banana"; let fruits = str.split(/\s+/); // 按空白字符分割 console.log(fruits); // ["apple", "orange", "banana"]

10. 正则表达式的修饰符

  • g:全局搜索,匹配所有符合条件的字符串,而不是只匹配第一个。
  • i:忽略大小写。
  • m:多行模式。

例如:

let regex = /abc/i; // 匹配 "abc" 或 "ABC"

总结

正则表达式是处理字符串的强大工具,它可以通过简单的规则来高效匹配复杂的文本模式。掌握正则表达式能够在很多开发任务中大大提高效率。

如果有任何具体的例子或问题,随时告诉我!