正则表达式
用法
创建正则:
js
const regExp = new RegExp(pattern, flags);
// or
// const regExp = /pattern/flagsflags 可选以下三个值:
i执行对大小写不敏感的匹配g执行全局匹配m执行多行匹配
实例方法:
exec检索字符串中指定的值,返回找到的值,并确定其位置test检索字符串中指定的值,返回 true 或 falsetoString返回正则表达式的字符串
语法速记
- 字符组:
[], 匹配[]里面任意一个字符即可 - 字符组区间:
[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 模式