Skip to content

正则表达式

用法

创建正则:

js
const regExp = new RegExp(pattern, flags);

// or
// const regExp = /pattern/flags

flags 可选以下三个值:

  • i 执行对大小写不敏感的匹配
  • g 执行全局匹配
  • m 执行多行匹配

实例方法:

  • exec 检索字符串中指定的值,返回找到的值,并确定其位置
  • test 检索字符串中指定的值,返回 true 或 false
  • toString 返回正则表达式的字符串

语法速记

  • 字符组:[], 匹配 [] 里面任意一个字符即可
  • 字符组区间:[a-z] 26 个英文字母,[A-Z] 表示大写,[a-zA-Z] 26 个英文字母的大小写,[0-9] 表示数字
  • 字符组取反:[^]
  • 数量匹配符:{}, {5} 表示出现 5 次,{1,4} 表示出现次数区间在 1-4 之间,{1, } 表示次数出现在 1 次以上
  • 量词:+: 至少出现一次 等同于 {1, }, *: 出现 0 次或无数次等同于 {0, }
  • 分组符:(), 例如:(jpg|png|mp3|mp4)
  • 转义符:\
  • 数字、字母的快捷表达: \w, \d, \W, \D
  • 特殊字符:\n, \t, \r, \s
  • 开头和结束:^ 以什么字符开头,$ 以哪个字符结尾
  • 任意字符:.
  • 可选字符:?

断言

断言 (Assertions) 是正则表达式中用于指定匹配位置必须满足(或不满足)某些条件的特殊语法,它们不会消耗字符(即不会成为匹配内容的一部分)

有四类断言:

  • 负向后行断言 (?<!) : 匹配一个位置,该位置前面不是指定的模式
  • 负向先行断言 (?!) : 匹配一个位置,该位置后面不是指定的模式
  • 正向后行断言 (?<=)
  • 正向先行断言 (?=)

例如:

js
/(?<!\$)\d+/.test("$100") // false,因为数字前有$
/\d+(?!%)/.test("100%") // false,数字后有%

不匹配内容

[^\/]+ => 一串不包含斜杠的字符,例如:

js
// 提取域名
const reg = /^(?:https?:\/\/)?(?:[^\/]+)/i;

// "https://juejin.cn"
"https://juejin.cn/user/123".match(reg)[0];

非贪婪匹配

匹配到第一个字符就停止

(.*?)

js
const reg = /<(.*?)>/;

// <div class="flex">
"<div class="flex">123</div>".match(reg)[0];

匹配后替换

js
str.replace(regExp, replaced);
str.replaceAll(regExp, replaced); // reg 是 global 模式
2025( )
今日 20.83%
本周 42.86%
本月 10.00%
本年 67.40%
Powered by Snowinlu | Copyright © 2024- | MIT License