说明
正则表达式在js中是一个对象,相当于某个字符规则的标识。需要配合字符串类型的数据来使用,正则本身是没有实际处理能力,需要借助字符串的本身方法来进行一系列的操作。
当然啦,正则对象本身也有一些属性和方法可以使用。
常用Api
-
test
构建
两种方式:
-
字面量
-
构造函数(注意/的转义字符)
修饰符
g:全局
i:忽略大小写
m:多行搜索
u:Unicode 功能是否开启
y:启动用sticky
元字符
正则表达式由2种基本字符类型组成:1.原义文本字符, 2.元字符
元字符是在正则表达式中有特殊含义的非字母字符
* + ? $ ^ . | \ () {} []
- []:某一类、范围类
- ^:非、以开头
- ?:出现零次或一(最多出现一次)
- +:出现一次或多次(至少出现一次)
- *:出现零次或多次(任意次)
- {n}:出现n次
- {n,m}:出现n到m次
- {n,}:至少出现n次
- ():分组
- |:或
- $:分组内容
字符类
不是单指一个字符,而是某一类字符的集合
'a1b2c3d4'.replace(/[^abc]/g,'A')
// aAbAcAAA
匹配:不是a、b、c的字符,【全局】
范围类
表示一些常识字符的范围,比较数字0到9,字符a到z
[0-9]
[a-z]
[a-zA-Z]
demo1:
'a1b2c3d46'.replace(/[a-z]/g,'X')
// X1X2X3X46
匹配:a到z的字符, 【全局】
demo2:
问:“-”并不是特殊字符,也不是元字符,有时在类里就想要匹配“-”时该如何?
记住:“-”在中间,即一个开头,一个结尾这样的语法里,表示范围。
'2017-11-10'.replace(/[0-9-]/g,'A')
// AAAAAAAAAA
预定义类
用一些简写的方式,定义某些经常用到的规则,比如数字、单词
边界匹配符
量词
匹配一个连续出现n次数字的字符串
贪婪模式与非贪婪模式
是关于匹配次数的约定。
贪婪模式:正则表达式在匹配时会尽可能多地匹配,直到匹配失败,默认是贪婪模式。
非贪婪模式:让正则表达式尽可能少地匹配,即一旦匹配成功就不再继续往下,这就是非贪婪模式。在量词后面加?即可。
分组
()
使用 | 可达到或的效果
反向引用、分组捕获
前瞻
js正则对象属性
sticky
就用来排除前几位匹配,看MDN