一、什么是正则?
正则就是规则,一种能够让计算机读懂的规则。正则最初的概念是由Unix的sed、grep等命令普及的,一个正则表达式是一个pattern(模式),它通常用来匹配符合某种规则的字符串。
举个例子,小B要办一个酒会,但是参加酒会的人必须符合以下几个规则,1、年龄在18-25岁,2、热爱生活和游戏。来参加酒会的人必须要满足这两个条件,这两个规则就相当于一个正则表达式,符合了这个正则表达式就等于说,ok,你被选中了,就是你了。
二、正则的写法
全称RegExp: var re = new RegExp();
简写:var re = //; //尽量不要为空
三、正则的规则
1、当正则需要传参的时候,一定要使用全称的写法
2、在引号内,如果要输出特殊字符,要多加一个\
var s = 'asd';
var re = new RegExp('\\w');
console.log(re.test(s)) // true
var re1 = new RegExp('\w');
console.log(re1.test(s)) // false
var re2 = /\w/;
console.log(re2.test(s)) // true
3、正则默认区分大小写,若不区分大小写,则应在正则最后加上小写" i "
eg:
var re = /\d/i;
var re = new RegExp('\\d','i');
4、正则默认匹配成功就结束,不会继续匹配,若要全部查找,要加标识g(全局匹配
eg:
var re = /\d/g;
var re = new RegExp('\\d','g');
四、方法
1、test:正则去匹配字符串,匹配成功返回true,失败false
写法:正则表达式.test(字符串)
var str = 'test'
var re = /\w/; // \w代表字符,有字符就能够匹配成功,当前匹配到了t
console.log(re.test(str)) // true
2、search:正则去匹配字符串,匹配成功返回位置,失败返-1
写法:字符串.search(正则)
var str = 'search';
var re = /a/;
console.log(str.search(re)) // 2
3、match:正则去匹配字符串,匹配成功返成功的数组,失败返null
写法:字符串.match(正则)
var str = 'asdaf7a8saxahsda9duasxa3';
var re = /\d/g;
console.log(str.match(re)) // [ '7', '8', '9', '3' ]
4、replace:正则去匹配字符串,匹配成功的字符去替换新的字符串
写法:字符串.replace(正则,新的字符)
第二个参数可以是字符串,也可以是回调函数
str.replace(re,function(s){
函数的第一个参数就是匹配成功的字符
})
五、匹配子项
小括号()
: 除了匹配子项的意思,还有分组的意思
var str = '2017-10-10';
var re = /(\d-)+/g;
str.replace(re, ($0) => { // $0表示当前匹配到的元素
console.log($0) //依次打印 7- 0-
})
正则的整体叫做母亲,把左边第一个小括号里面的正则,叫做这个第一个子项(母亲的第一个孩子,第二个小括号就是第二个孩子)
整体:re = /(\d+)(-)/g;
var str = '2017-10-10';
var re = /(\d+)(-)/g;
str.replace(re, ($0, $1, $2) => { // $0表示当前匹配到的元素
// 第一个参数$0:母亲,即2017-或者10-
// 第二个参数$1:第一个子项,即2017或者10
// 第三个参数$2:第二个子项,即-
console.log($0, $1, $2) //依次打印2017- 2017 - 和 10- 10 -
})
六、字符类:一组相似的元素
[]
中的整体代表一个字符
var str = 'abdc'
var re = /a[bef]d/;
console.log(re.test(str)) // true
排除:^如果写在[]里面的话,代表排除的意思
范围:[a-d] a到d这个范围
var str = 'abdc'
var re = /a[a-z0-9A-Z]d/;
console.log(re.test(str)) // true
七、常见转义字符
. 任意字符
. 真正的点
\n 换行
\r 制表
\t 回车
\s 空格
\S 非空格
\d 数字
\D非数字
\w 字符
\W 非字符
\b 独立的部分(起始,结束,空格)
\B 非独立的部分
字符:字母、数字、下划线三类都称为字符
\1 重复的第一个子项 var re = /(a)(b)(c)/1/2/; // /1代表a
\2 重复的第二个子项 var re = /(a)(b)(c)/1/2/; // //2代表b
八、量词:{}
{4,7}
: 前面的字符最少出现4次,最多出现7次
{4,}
: 最少出现4次
{4}
: 正好出现4次
+
: 相当于{1,}
?
: 0次或者1次 {0,1}
*
: 至少出现0次 {0,}
九、其他
^
: 代表正则最开始的位置
$
: 代表正则结束的位置
var str = 'abdc'
var re = /^a.+c$/;
console.log(re.test(str)) // true
|
: 或的意思
var str = 'abdc'
var re = /^(a|e)/;
console.log(re.test(str)) // true