正则
是一种复杂数据类型
作用:用来检验字符串,验证书写的字符串是否符合规则,也把正则叫做正则表达式
创建正则
字面量方式创建
语法:var 变量名 = / 内容 /
内置构造函数创建
语法:var 变量名 = new regExp ("内容")
正则常用方法
test方法 test()
语法:正则 . test(要检验的内容(字符串))
返回值:true 表示字符串中有能匹配的内容
flase 表示字符串中没有能匹配的内容
exec方法 exec()
语法:正则 . exec(内容)
作用:用来捕获
返回值:如果没有我们要的内容,返回值为null
如果有,返回是一个数组
1,没有()也没有全局g
索引0位置是捕获出来的结果
不管捕获多少次都是第一个满足条件的结果
2,有全局g
第一次捕获出来是满足条件的的第一个内容
后面再次捕获从上次结束位置开始向后捕获,以此类推
直到捕获为null
如果继续捕获,又从第一个满足的开始捕获
3,有()
一层意思:一个整体
二层意思:单独捕获
索引0位置是原始字符串
索引1位置是我们单独捕获的内容
两种创建方式的区别
语法区别
字面量 :var reg = / abc /ig
内置构造函数:var reg = new RegExp("abc","ig")
拼接字符串区别
字面量方式不能拼接字符串
内置构造函数方式可以拼接字符串
书写元字符方式不同
字面量方式 : /\d\w\s/
内置构造函数方式:new RegExp('\\d\\w\\s')
=>因为 \ 是一个转义字符
=>\d是一个没有意义的字符,需要转义
正则的符号
元字符
修饰符(标识符)
元字符
书写在正则表达式内部的符号
基本元字符
\d 表示一位数字
\D 表示一位非数字
\s 表示一位空白内容(换行,空格,缩进)
\S 表示一位非空白内容
\w 表示一位数字0--9,或字母a--z,A--Z,或下划线__
\W 表示一位非数字0--9,或字母a--z,A--Z,或下划线__
. 表示一位非换行以外的内容
\ 表示一个转义字符
边界符
^ 表示以...开头
$ 表示以...结尾
注意:如果一起使用表示从开头到结尾
特殊符号
():第一层()表示一个整体
第二层()表示单独捕获
|: 表示或,占位或
表示符号左侧或右侧任何一个
[ ]: 表示包含的意思,表示只能是其中一个内容,也就是 [ ] 中任何一个都可以
[^ ]: 表示的是非,也就是符号中的任何一个都不可以
- : 表示至或者到
一般和【】或[^ ]连用
注意:必须和ASCII(unicode编码)连着的才可以
修饰符(标识符)
书写在正则表达式外面的符号,如果两个符号一起出现,谁在前面无所谓
i:表示忽略大小写
g:全局
限定符
就是用来限定前面符号出现的次数
* 表示前面的符号出现 0--多次
+ 表示前面的符号出现 1--多次
? 表示前面的符号出现 0--1次
{n} 表示前面的符号出现指定次数
{n,} 表示前面的符号出现n次到多次
{n,m} 表示前面的符号出现n次到m次
正则的两大特性
懒惰性
每次在捕获时都是从头开始,不记忆之前的位置
解决方案是加全局标识符g
贪婪性
尽可能多的获取
匹配机制
贪婪匹配:能拿多少拿多少
非贪婪匹配:能拿多少拿多少
非贪婪限定符
*?
+?
??
{n,}?
{n,m}?
可以使用正则的字符串方法
replace()
语法:字符串 . replace(换下片段,换上片段)
语法:字符串 . replace(正则,换上片段)
在使用正则时,如果没有全局g和使用字符串方法一样
search()
语法:字符串 . search(内容)
语法:字符串 . search(正则)
作用:和indexOf一样
返回值:如果有就是第一次出现的索引
如果没有就返回-1
match()
语法:字符串 . match(内容)
语法:字符串 . match(正则)
返回值:是一个数组
在没有全局g的时候只捕获第一个
如果有全局g,有多少捕获多少
正则预查
正向:从左向右这个方向
正向肯定预查(?=)
正向否定预查(?!)
负向:从右向左这个方向
负向肯定预查(?<=)
负向否定预查(?<!)