正则是复杂数据类型,用来验证字符串是不是符合规则的,也叫做正则表达式。
创建正则
字面量方式:
语法:var 变量名 = /字符/
内置构造函数
语法:var 变量名 = new RegExp('字符')
```两种创建方式的区别```
1.语法不同
修饰符的书写
字面量的方式:直接书写在正则的后面 var 变量名 = /字符/ig
内置构造函数:var 变量名 = new RegExp('字符','ig')
2.拼接字符串
字面量的方式是不能拼接字符串的
内置构造函数的方式是可以拼接字符串的
3.元字符的书写
字面量的方式:直接书写 /\d\w\s/
内置构造函数:需要使用转义符 \\d\\w\\s
正则常用方法
test():
语法:正则.test(你要验证的内容)
返回值:布尔值
true:符合验证要求;
false:不符合验证要求;
var reg = /abc/
var str = 'addfrdah'
//用来验证str里面是否有abc
var res = reg.test(str)
console.log(res)
exec():
语法:正则.esec(字符串)用来捕获的
返回值:
如果没有,返回null
var reg = /\d{3}/
如果有,
没有()也没有全局g
返回数组,索引0的位置就是捕获出来的内容,永远只捕获第一个满足的。
有全局g
返回数组,索引0的位置就是捕获出来的内容,多次捕获的时候会从上次结束的位置向后检索,直到结果为null,如果还有捕获,会从头开始捕获。
有括号()
返回数组,索引0的位置返回完整的字符串,所以1,2,3...的位置依次是单独捕获到的内容。
基本元字符
\d:表示 一位 数字
\D:表示 一位 非数字
var reg = /\D/
console.log(res.test('dvfvsf87ca')) //true
\s:表示 一位 空白内容,包括空格、缩进、换行
\S:表示 一位 非空白内容
\w:表示 一位 数字(0-9)、字母(a-zA-Z)、下划线(_)中的一位
\W:表示 一位 非数字(0-9)、字母(a-zA-Z)、下划线(_)中的一位
.:表示 除了换行以外的任意内容,至少要有一位非换行的内容
var reg = /\d.\d/
console.log(res.test('1.5'))
\:是一个转义符,就是把没有意义的转成有意义的,把有意义的转成没有意义的
var reg = /\d\.\d/ 现在点就单纯的是一个点了
console.log(res.test('1.5')) //true
console.log(res.test('1#5')) //false
边界符
^:表示的是以什么开头
var reg = /^\d/,表示以数字开头
$:表示的是以什么结尾
var reg = /\s$/,表示以空白开头
//如果一起使用表示从开头到结尾
var reg = /^\d$/,表示从头到尾都是一位数字
限定符
*:表示前面的符号出现0-多次
+:表示前面的符号出现1-多次
?:表示前面的符号出现0-1次
{n}:表示前面的符号连续出现指定的次数,n是几就出现几次
{n,}:表示前面的符号至少连续出现n次
{n,m}:表示前面的字符最少连续出现n次,最多连续出现m次
特殊符号
():
第一层意思:表示一个整体
var reg = /(abc)/
console.log(reg.test('abc'))
第二层意思:表示单独捕获
|: 占位或,表示这个符号的左侧或者右侧 任意一侧出现都可以
var reg = /abc|def/
console.log(reg.test('abc'))
[]: 包含的意思,书写在中括号里的任意一个都可以
var reg = /[abcd]/
console.log(reg.test('abcde'))
//注意:一个符号占一个字符的位置
[^]: 表示非:意思是书写在中括号里的任意一个都不可以
//注意:一个符号占一个字符的位置
var reg = /[^abcd]/
console.log(reg.test('af')) //true
-: 表示到:从什么到什么,
必须是ASCII连续的,一般和[]或者[^]一起用
修饰符
用来修饰整个正则表达式的符号,书写在正则表达式的外面
i:忽略大小写的
var reg = /[a-z]/!
console.log(reg.test('A')) //true
g:表示全局
正则的两大特性
懒惰性:
当我们要进行捕获的时候,只有满足的就直接返回了,不再往后捕获了
//解决方法就是使用全局g
贪婪性:
贪婪匹配:能拿多少拿多少
非贪婪匹配:尽可能地少拿
非贪婪限定符:
*?
+?
??
{n,}?
{n,m}?
能使用正则的字符串方法
replace():字符串.replace(正则,'换上片段')
作用:就是用换上片段替换掉换下片段
特点:在没有全局g的时候,替换效果跟replace()一样只能替换一个
特点:如果有全局g的时候,有多少替换多少
search():字符串.search(/你要检测的数据/) //和indexof()一样
作用:就是用来验证字符串中有没有这个数据,如果有返回的就是这个数据对应的索引,没有就返回-1。
match():字符串.match('字符串片段') //这个方法和exec一样
作用:就是从字符串中捕获到满足条件的内容,以数组的形式返回,如果使用正则没有加全局g,只捕获到第一个满足条件的内容.
正则预查(扩展)
正则预查
正向预查
正向肯定预查:?=
var reg = /windows(?=\d+)/g
正向否定预查:?!
var reg = /windows(?!\d+)/g
负向预查
负向肯定预查:?<=
var reg = /(?<=\d+)windows/g
负向否定预查:?<!
var reg = /(?<!\d+)windows/g