JavaScript正则表达式

JavaScript 正则表达式知识点大全

JavaScript 正则表达式知识点大全

专为编程小白设计的正则表达式详细指南,用最简单的语言解释复杂概念

什么是正则表达式?

正则表达式(Regular Expression)是一种强大的文本处理工具,它使用特定模式来匹配、查找或替换字符串中的内容。

想象一下:你有一本书,你想找到所有包含”apple”的句子。正则表达式就像是专门用来做这种查找工作的智能工具。

主要用途

  • 验证用户输入(如邮箱、电话号码)
  • 在文本中查找特定内容
  • 替换文本中的某些部分
  • 从字符串中提取特定信息

创建正则表达式

在JavaScript中,有两种创建正则表达式的方式:

1. 字面量语法

let regex = /pattern/flags;

示例:查找”apple”(不区分大小写)

let appleRegex = /apple/i;

2. 构造函数方式

let regex = new RegExp(“pattern”, “flags”);

示例:同上效果

let appleRegex = new RegExp(“apple”, “i”);
何时使用哪种?
字面量语法更简洁常用,但当你需要动态构建正则表达式时,必须使用构造函数方式。

常用符号与含义

基础符号

  • . – 匹配任意单个字符(除换行符)
  • \d – 匹配数字(0-9)
  • \w – 匹配字母、数字或下划线
  • \s – 匹配空白字符(空格、制表符等)
  • ^ – 匹配字符串的开始
  • $ – 匹配字符串的结束

量词

  • * – 0次或多次
  • + – 1次或多次
  • ? – 0次或1次
  • {n} – 恰好n次
  • {n,} – 至少n次
  • {n,m} – 至少n次,不超过m次

示例:匹配日期格式

\d{4}-\d{2}-\d{2} 可以匹配”2023-05-15″

修饰符(Flags)

修饰符放在正则表达式末尾(如 /pattern/g),用于改变匹配方式:

  • i – 不区分大小写
  • g – 全局匹配(查找所有匹配而非在第一个匹配后停止)
  • m – 多行模式(使 ^ 和 $ 匹配每行的开头和结尾)
  • s – 使 . 匹配包括换行符在内的所有字符
  • u – 启用完整的Unicode支持
  • y – 粘性匹配(从目标字符串的当前位置开始)
// 示例:全局不区分大小写匹配 let regex = /apple/ig;

字符类(Character Classes)

字符类用于匹配一组字符中的任意一个:

// 匹配a, b或c中的任意一个字符 let regex = /[abc]/; // 匹配任何元音字母(不区分大小写) let vowelRegex = /[aeiou]/i; // 匹配0到9的数字 let digitRegex = /[0-9]/; // 匹配任何非数字字符 let nonDigitRegex = /[^0-9]/;
提示: 在方括号内使用 ^ 表示”非”,例如 [^0-9] 表示任何非数字字符。

JavaScript中的正则方法

String方法

  • test() – 检查字符串是否匹配模式
  • exec() – 查找匹配并返回详细信息

RegExp方法

  • match() – 返回所有匹配的数组
  • matchAll() – 返回所有匹配的迭代器
  • search() – 返回第一个匹配的索引
  • replace() – 替换匹配内容
  • split() – 使用正则拆分字符串
// 使用test()方法验证邮箱 let emailRegex = /^\w+@\w+\.\w+$/; let isValid = emailRegex.test(“user@example.com”); // true // 使用match()方法提取所有数字 let str = “2023年5月15日”; let numbers = str.match(/\d+/g); // [“2023”, “5”, “15”]

分组与捕获

使用圆括号 () 创建分组:

  • 将多个字符视为一个整体
  • 创建捕获组以便后续使用
  • 应用量词到整个分组
// 匹配重复的单词 let repeatRegex = /(\w+)\s+\1/; repeatRegex.test(“hello hello”); // true // 提取日期各部分 let dateRegex = /(\d{4})-(\d{2})-(\d{2})/; let result = dateRegex.exec(“2023-05-15”); // result[0]: “2023-05-15” (完整匹配) // result[1]: “2023” (年) // result[2]: “05” (月) // result[3]: “15” (日)
注意: 如果不需要捕获分组,可以使用非捕获分组 (?:…),避免占用内存和提高性能。

实际应用示例

1. 验证邮箱格式

let emailRegex = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/; emailRegex.test(“user.name@example.com”); // true

2. 提取URL中的域名

let url = “https://www.example.com/path/page.html”; let domain = url.match(/https?:\/\/([^\/?#]+)(?:[\/?#]|$)/i)[1]; // “www.example.com”

3. 移除多余空格

let text = ” Hello World! “; let cleanText = text.replace(/\s+/g, ‘ ‘).trim(); // “Hello World!”

4. 密码强度校验

// 至少8个字符,包含大小写字母和数字 let strongPasswordRegex = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/;

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部