目录
RegExp对象:
字面量:let reg = /\bis\b/g
构造函数方式:let regs = new RegExp('\\bis\\b', 'gi')第二个参数可以是g(全局),i(大小写),m(多行搜索)。也可以是组合形式详细见下方'RegExp对象属性'
元字符 正则表达式中有特俗含义的非字母字符(见下方)
原义文本字符 例如:我,你,a,b,c,1,2,3这样的标识匹配该字符
g 全局匹配
i ignore case忽略大小写(默认大小写敏感)
m 多行搜索
元字符:
\t 水平制表符
\w 垂直制表符
\n 换行符
\r 回车符
\0 空字符
\f 换页符
\cx 与X对应的控制字符(ctrl+X)
[] 规定一类字符如[abc]表示匹配a或b或c为一类字符
^ 创建反向类(取反的意思)如[^abc]表示不匹配a或b或c一类字符
[a-z] 范围类表示a-z的小写字符
[a-zA-Z] 匹配匹配所有大小写字母
[0-9-] 匹配0-9的数字以及数字之间的'-'连接符号如2020-09-09
预定义类
. 除了回车和换行之外所有字符
\d 所有数字[0-9]
\D 所有非数字[^0-9]
\s 空白符号(\t \w \n \r \0 \f)
\S 非空字符
\w 单字字符[a-zA-Z_0-9]
\W 非单字字符[^a-zA-Z_0-9]
边界
\b 单字边界(例如this 和 is没有边界this中的is也会被匹配)
\B 非单字边界
^ 以XXX开始(^123以123开始)
$ 以XXX结束(123$以123结束)
量词(匹配多次)
? 出现0次或1次(最多一次) /2?/g
+ 出现一次或多次(至少一次) /2+/g
* 出现0次或多次(任意次数) /2*/g
{n} 出现n次 /2{3}/g
{n,m} 出现n-m次 /2{3, 5}/g
{n,} 至少出现n次 /2{3,}/g
模式
贪婪模式
正则默认会尽可能多的匹配如:'12345678'.replace(/\d{3,6}/g, 'K') // K78
非贪婪模式
在量词后加上?即可如:'12345678'.replace(/\d{3,6}?/g, 'K') // KK78
分组
()可以达到分组的效果如:a1b2c3d4.replace(/([a-z]\d){3}/g, 'K') // 某个组合连续出现3次
忽略分组:使用?:可以忽略分组(?:aaa)
或:a|b 表示a或b
非:!a 表示不为A
反向引用
例如把年月日反向'2020-10-10'.replace(/(\d{4})-(\d{2})-(\d{2})/g, '$2-$3-$1') //10-10-2020
其中这边的()分组是为了使用$来捕获分组
前瞻:
正则默认从文本头部向尾部解析,向前检查是否符合规则
如'a3*3'.replace(/\w(?=\d)/g, 'NNN') // NNN3*3 (?=\d)为前瞻判断匹配到的单字符串接下去是否为数字
后瞻:
和前瞻相反
如'1e1'.replace(/(?<=\d)\D/g, 'NNN') // 1NNN1 (?<=\d)为后瞻判断匹配到的单字符串前面是否为数字
RegExp对象属性
global 全局搜索 default: fasle
ignore case 忽略大小写 default: fasle
multiline 多行搜索 default: fasle
lastIndex 当前表达式匹配内容的最后一个字符的下一个位置
source 正则表达式的文本字符串
正则表达式的方法
test()
exec()
const regexp = () => {
let str = 'my name Is jiang, she is dell';
let str1 = 'a1b2c3';
let str2 = 'nambdc';
let str3 = '1a2c2t3A2M3V1U2';
let str4 = '1234ab2324';
let str5 = 'this is a boy';
let str6 = '@1234@sadasd@';
let str7 = '1222222333333';
let str8 = '12345678';
let str9 = 'a1b2c3d4';
let str10 = 'aaaabbbb';
let str11 = '2020-10-10';
let str12 = 'a2*3';
let reg = /\bis\b/g;
let reg1 = /[abc]/g;
let reg2 = /[^abc]/g;
let reg3 = /[a-zA-Z]/g;
let reg4 = /ab\d./g;
let reg5 = /\Bis\b/g;
let reg6 = /^.@/g;
let reg6_1 = /.@$/g;
let reg7 = /2{3}/g;
let reg8 = /\d{3,6}?/g;
let reg9 = /([a-z]\d){3}/g;
let reg10 = /(aa|bb)/g;
let reg11 = /(\d{4})-(\d{2})-(\d{2})/g;
let reg12 = /\w(?=\d)/g;
let regs = new RegExp('\\bis\\b', 'gi');
console.log(
'正则匹配结果:',
str12.replace(reg12, 'NNN'),
str.replace(regs, 'IS'),
regs.source,
regs.lastIndex,
regs.global,
regs.ignoreCase,
regs.multiline,
regs.test(str)
);
}