- 通常使用字面量
/
创建,例如:/^1\d{10}$/.test(17355476130)
,但如果含有变量,使用new RegExp(str,mode)
创建 - 正则
|
中竖线不是匹配单个字符,而是匹配两边的表达式,可以使用()
限定范围 - 原子表
[]
,代表匹配中括号中的任意一个字符,如匹配字母[a-zA-Z] - 原子组
()
,可以理解为一个整体的表达式 - 字符串中
'\d'==='d'
,\\d
才代表\d
\1
代表第一个原子组- 中括号中
.
就是点,+
就是加,()
就是括号,\.
也是点 ^
和$
分别代表匹配的起始和结束位置^
也代表非,例如:/[\^\d]/.test("a")
- 模式修饰
i
:不区分大小写g
:全局匹配.
:不包括\n
,可以使用模式修饰\s
忽略换行,让.
也有换行m
:将每一行单独处理,每一行都是一个独立的部分和正则匹配u
:使用编码
- 元字符
\d,\D
:[0-9],[^0-9]\w,\W
:[A-Za-z0-9_],[^A-Za-z0-9_]\s,\S
:[\n\f\r\t\v],[^\n\f\r\t\v][\s\S]
,[\d\D]
等代表匹配所有字符\b,\B
:单词边界,非单词边
- 空格和普通字符一样可以直接使用空格
\ \
,也可以用\s
,但\s
会包含换行符 - 重复匹配,匹配的是前面的单个字符或组
*,+,?
:0-n,1-n,0-1{n},{n,},{n,m}
:n,n-,n-m
*?
,+?
,??
,{n,m}?
,{n,}?
会禁止贪婪匹配- 匹配中文的方法:
/\p{sc=Han}+/gu
或者/[\u4e00-\u9fa5]+/g
\t
代表制表位tab
,\n
代表换行,可以直接使用/\n/g
- 如果希望参与匹配但并不参与分组,可以使用
(?:
- 断言,可以理解为匹配的条件,即不参与匹配也不参与分组
x(?=exp)
零宽先行断言,x的后面必须出现exp(?<=exp)x
零宽后行断言,x的前面必须出现expx(?!exp)
零宽负向先行断言,x的后面不能出现exp(?<!exp)x
零宽负向后行断言,x的前面不能出现exp
- 字符串方法(参数均可为正则或字符串)
search
:返回匹配的位置。match
非全局会返回细节,否则返回数组,使用matchAll
或者exec
可以实现批量匹配细节,eg:[..."123".matchAll(/\d/g)]
。split
可以使用字符串或者正则分割字符串。replace
替换操作,可以替换为$,本身,左,右,N,还可以使用回调函数,以此参数为match子串,匹配项$n,偏移量offset,原字符串string。使用replaceAll
可以实现批量替换。
console.log("张三出生2000年6月,今年22岁了".search(/\d+/)) // 输出:4 console.log("张三出生2000年6月,今年22岁了".match(/\d+/)) // 输出:['2000', index: 4, input: '张三出生2000年6月,今年22岁了', groups: undefined] console.log("张三出生2000年6月,今年22岁了".match(/\d+/g)) // 输出:['2000', '6', '22'] console.log("张三出生2000年6月,今年22岁了".split(/\d+/)) // 输出:"张三出生2000年6月,今年22岁了".split(/\d+/) console.log("张三出生2000年6月,今年22岁了".replace(/\d+/,"*")) // 输出:'张三出生*年6月,今年22岁了' console.log("张三出生2000年6月,今年22岁了".replace(/\d+/g,"")) // 输出:'张三出生*年*月,今年*岁了' console.log("张三出生2000年6月,今年22岁了".replace("0","*")) // 输出:'张三出生2*00年6月,今年22岁了' console.log("张三出生2000年6月,今年22岁了".replaceAll("0","*")) // 输出:'张三出生2***年6月,今年22岁了'
- 正则方法
test
: 检测一个字符串是否匹配某个模式,匹配则返回ture,不匹配则返回falseexec
:类似match
,可以循环调用直到匹配结果为空结束(如此反复),通过lastIndex
可以改变匹配起始位置,一定要在全局匹配模式下使用
console.log(/^\d{11}$/.test(12345678910)) //匹配手机号,输出:true console.log(/^\d{11}$/.test("12345678910")) //匹配手机号,输出:true
JS正则表达式知识点
于 2020-12-20 15:01:14 首次发布