正则表达式
一、概念
正则表达式是处理字符串,查找符合规则的字符串的式子,也叫规则表达式
二、创建方式
1.符号创建
var reg = /a/ ;
2.内置构造函数创建
var reg = new RegExp("a");
三、修饰符
i 执行对大小写不敏感的匹配。
例: var reg = /a/i ; //可以匹配大写A或者小写a
g 全局匹配,直到查完为止
m 当字符串多行,执行多行匹配
四、元字符
1.转义字符\
当我们要匹配一些特殊含义的字符,需要用\进行转义
例: 当我们要匹配\时,我们需要 var reg = /\\/ ;用反斜杠将\进行转义
2.匹配非换行的任意字符 小数点符号 “.”
--注:当我们要匹配小数点时需要用转义字符进行转义
例: var reg = /\./ ;
3.匹配空格 \s 反斜杠加小写的s
4.匹配非空格 \S 反斜杠加大写S
5.匹配数字 \d 反斜杠加小写d
6.匹配非数字 \D 反斜杠加大写D
7.匹配数字,字母,下划线。 \w 反斜杠加小写w
8.匹配非 数字,字母下划线 \W 反斜杠加大写W
五、正则表达式方法
1.test 直译测试 返回值是是Boolean类型
语法: 正则表达式.test(要测试字符串);
如果满足这个正则表达式,返回值为true,不满足则为false
例: var reg = /a/ ; //匹配一个字符串中是否含a
var str = 'jhfgjga13' ;
console.log(reg.test(str)); //测试字符串是否含a,含有则返回true
2.exec 直译执行 返回值是一个对象数组
语法: 正则表达式.exec(要执行的字符串);
例: var reg = /\d+/g ;
var str = 'das132ad124ad1324' ;
console.log(reg.exec(str));
返回值为
0: "132"
groups: undefined
index: 3
input: "das132ad124ad1324"
length: 1
[[Prototype]]: Array(0)
这里需要注意,当进行全局匹配的时候,下次执行会在这次索引值index之后开始匹配
第二次执行:
console.log(reg.exec(str));
返回值为
0: "124"
groups: undefined
index: 8
input: "das132ad124ad1324"
length: 1
[[Prototype]]: Array(0)
第三次执行:
console.log(reg.exec(str));
返回值为
0: "1324"
groups: undefined
index: 13
input: "das132ad124ad1324"
length: 1
[[Prototype]]: Array(0)
如果上述执行的不是全局匹配,即 reg = /\d+/ ;
不管我们执行多少次,它的返回值都是
0: "132"
groups: undefined
index: 3
input: "das132ad124ad1324"
length: 1
[[Prototype]]: Array(0)
六、限定符
1.出现的次数 {次数}
例: var reg = /b{2}/ ; //这个正则表达式表示存在2个连续的b出现一次或多次
var str = 'adbbbasjh' ;
console.log(reg.test(str)); //返回值为true
2.指定次数 {最少出现多少次,最多出现多少次}
例: var reg = /ab{2,4}c/ ; //在ac中间的b可以有2到4个
var str = 'fdabbbcaf' ;
console.log(reg.test(str)); //返回值为true
3.指定次数到无限次 {最少出现多少次,}
例: var reg = /ab{2,}c/ ; //在ac中间至少需要有2个b能匹配到
var str = 'abbbbbbbbbc' ;
console.log(reg.test(str)); //返回值为true
4.字符出现0次到无限次 “ * ” 也可以表示为{0,}
例: var reg = /a*/ ; //不管a有没有都能匹配到
var str = 'fjhg' ;
console.log(reg.test(str)) ; //true
5.字符出现一次或以上 “ + ” 也可以表示为{1,}
例: var reg = /a+/ ; //匹配的串中至少有一个a
var str = 'fjagkgjhf' ;
console.log(reg.test(str)); //true
6.字符出现1次或者不出现 “ ? ” 也可以表示为{0,1}
例: var reg = /a?/ ; //表示字符不出现或者出现1次
var str = 'ggaj00' ;
console.log(reg.test(str)); //true
七、特殊符号
1.开始符
^ 以什么开始
例: var reg = /^a/ ; // 能匹配以a开始的字符串
var str = 'jhdgfja' ;
console.log(reg.test(str)) // false
2.结束符
$ 以什么结束
例: var reg = /^a\d+a$/ ; //能匹配以a开始,a结束,中间是纯数字的字符串
var str = 'a132431000a' ;
console.log(reg.test(str)); //true
3.边界 边界符:非 数字,字母,下划线的字符豆角边界符
\b 边界符中
例1: var reg = /\bis\b/ ; //边界符中含is
var str = 'this is a knife' ;
console.log(reg.test(str)); //true
例2: var reg = /\bis\b/ ; //边界符中含is
var str = 'this a knife' ; //边界符左边有,右边没有
console.log(reg.test(str)); //false
八、与正则相关的字符串方法
1.split 字符串切割
例: var reg = /\d+/ ;
var str = 'ad23adaf354asff33ad1' ;
var arr = str.split(reg);
console.log(arr);
打印结果为:
0: "ad"
1: "adaf"
2: "asff"
3: "ad"
4: ""
length: 5
[[Prototype]]: Array(0)
字符串根据满足正则的条件进行切割,这里条件是根据字符串里的数字切割
2.search 查找字符串中满足正则条件的字符,并返回字符串中第一次满足正则的索引;如果字符串没有
满足正则的字符,则返回-1.和我们数组的indexOf类似。
例: var reg = /\d+/ ;
var str = 'ad122asdad132' ;
console.log(str.search(reg)); //返回值为2
3.match 字符串匹配方法,查找字符串中满足规则的字符,并放在数组里
例1: var reg = /\d+/ ;
var str = 'adaf232adad132ad12' ;
console.log(str.match(reg)); //[232]
这里没有全局匹配,正则会以一种惰性匹配的方式进行查找,只查找到第一次满足条件就不会再查找下去
例2: var reg = /\d+/g ;
var str = 'adaf232adad132ad12' ;
console.log(str.match(reg));
返回值: 满足条件的字符组成的数组
0: "232"
1: "132"
2: "12"
length: 3
[[Prototype]]: Array(0)
4.replace 字符串的替换,将字符串中满足正则的字符替换成我们想要的字符
例: var reg = /sm/ig ; //对sm两个字母进行全局不分大小写的匹配
var str = 'asd12adsm54adasmjhagjsjklmsm' ;
console.log(str.replace(reg,"**")); //将字符串中所有的sm替换成**
如果上述没有进行全局匹配,那么只会改变第一次满足条件的并进行替换