1.字面量创建正则表达式
/u/.test('love you')
2.使用对象创建正则表达式
let str = 'love you';
let reg = new RegExp('u', 'g');
reg.test(str)
3.选择符
左右两边的表达式
/a|@/.test('a pig')
原子表中不需要‘|’ 如 /[123]/表示1或者2或者3
原子组中需要 ‘|’,如/(12|34)/表示12或者34
4.正则表达式中的转义
在对象创建正则时相对于字面量创建要多加一层转译
如:new RegExp('\\d+\\.\\d+') 等价于 /\d+\.\d+/
5字符边界约束
限定起始边界:/^\d/
限定结束边界:/\d$/
6.元字符说明集合
\d :匹配数字
\D :除了数字以外的其他
\s :空白(空格,换行,制表符等都包括)tip: 空格和abc 一样
\S : 除了空白以外的其他
\w :匹配字母数字下划线
\W :匹配除字母数字下划线之外的其他
. :除了换行符之外的任何, 匹配www.baid.com中的'.'字符,需要额外转译 \.
7.如何巧妙匹配所有字符-利用利用原子标的可选行
/[\d\D]+ / /[\s\S]+/
8.模式修正符
作用:修改正则表达式的运行方式
i:不区分大小写
g: 全局匹配,中间没有,跳过继续
y: 连续满足,遇到不满足的,停止
m:每行单独处理
s:多行视为单行处理
9.字符属性检查
\p : 检查字符的每一个属性
/\p{L}/gu : 匹配每一个包含字母的字符
/\p{P}/gu : 匹配每一个包含标点符号的字符
/\p{sc=Han}/gu : 匹配每一个包含中文的字符------匹配中文的方式
+ :代表+前面的字符至少出现一次
* :代表*前面的内容出现0次或多次
? :代表?前面的字符只能出现0次或者1次
原子组demo: /^\d{4}([-/])\d{2}\1\d{2}/g
原子表中[]的()就是字符(),外面表示原子组,. +也是
10.排除匹配
在原子表中加^,如/[^ue]/gi
11.认识原子组
(h[1-6]):认为是一个整体,从左到右,依次为\1 \2 \3
原子组嵌套分组与不记录组的情况:
/https?:\/\/w{3}(\w+\.(?:com|cn|net))/
12.多个正则校验一个字符串
let regs = [/^[a-z0-9]$/i, /[A-Z]/, /[0-9]/];
let result = regs.every(reg => reg.test(str))
13.❓禁止贪婪
let hd = ‘hdddd’;
hd.match(/hd?/) 匹配一个
hd.match(/hd{2,5}?/) 匹配2个
hd.match(/hd??/) 匹配0个
14.exec完成全局匹配
const search = (string, reg) => {
let result = [];
while ((let res = reg.exec(string))) {
result.push(res)
}
return result;
}
15.正则表达式的方法
search :str.search (/\d/或者‘u’),返回索引,没有返回-1
match :str.match (/\d/或者‘u’),返回匹配到的内容,不会返回细节,比如原子组的内容
matchAll: str.matchAll (/\d/或者‘u’),返回迭代器,用of迭代
split: str.split(/[-/]/)
replace: str.replace(///g, '-')