一、是什么
正则: 也叫做规则
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式
正则默认:
①、区分大小写。如果不区分大小写的话,在正则的最后添加标识 i
②、匹配成功后就会结束,不会继续匹配。如果想全部查找,就要添加标识 g (全局匹配)
二、为什么
将某个字符模式与所搜索的字符串进行匹配,让计算机能够读取人类的规则
①、测试字符串内的模式,以查看字符串内是否出现某模式(例:电话、身份证等)
②、替换、删除文本
③、基于模式匹配从字符串中提取子字符串
三、怎么做(主要讲述正则表达式常用的四种方法)
1、test
定义:正则去匹配字符串,如果匹配成功返回true,否则返回false
用法:正则.test(字符串)
例:
var str = 'hijklmn58';
var re = /\D/; (非数字)
console.log(re.test(str)); // true
2、search
定义:正则去匹配字符串,如果匹配成功返回匹配成功的位置,否则返回 -1 (相当于字符串的indexOf)
用法:字符串.search(正则)
例:
var a = 'abcdefg';
var re = /b/;
var re2 = /p/;
console.log(a.search(re)); // 1
console.log(a.search(re2)); // -1 匹配失败
3、match
定义:正则去匹配字符串,如果匹配成功返回匹配成功的数组,否则返回 null
用法:字符串.match(正则)
例:
var a = 'abc123def4ghi567jk890';
var re = /\d+/g; // + 是量词,表示匹配不确定的位置,+ 表示至少出现一次;g 表示全局匹配
console.log(a.match(re)); // ["123", "4", "567", "890"]
4、replace
定义:正则去匹配字符串,匹配成功的字符去替换成新的字符串
用法:字符串。replace(正则, 新的字符串)
例:
var a = '我太爱吃烧烤啦,我感觉我上辈子就是烧烤';
var re = /烧烤/g;
console.log(a.replace(re, '**')); // 我太爱吃**啦,我感觉我上辈子就是**
注:replace的第二个参数,可以是字符串,也可以是一个回调函数,函数的第一个参数,就是匹配成功的第一个字符
var result = a.replace(re, function() {
return '**'
});
console.log(result); // 我太爱吃**啦,我感觉我上辈子就是**
四、特殊字符
$ 匹配输入字符串的结尾位置。如果设置了RegExp对象的Multiline属性,则 $ 也匹配,如'\n' 或 '\r'
() 标记一个子表达式的开始和结束位置, \( 和 \)
* 匹配前面的子表达式零次或多次, \*
+ 匹配前面的子表达式一次或多次, \+
. 匹配除换行符\n之外的任何单字符, \.
[ 标记一个中括号表达式的开始, \[
? 匹配前面子表达式零次或一次,或指明一个非贪婪限定符, \?
\ 将下一个字符标记为或特殊字符或原意字符或后向引用或八进制转义符。例如:'n'匹配字符'n',而'\n'匹配换行符。序列'\\'匹配'\'
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时表示排除
{} 标记限定符表达式的开始, \{
| 指明两项之间的一个选择, \|
五、转义字符
\n : 换行
\r : 制表
\t : 回车
\s : 空格
\S : 非空格
\d : 数字
\D : 非数字
\w : 字符(字母、数字、下划线)
\W : 非字符(特殊字符、汉字等)
六、常用正则表达式
1、手机号: const tel = 11 && /^1[0-9]{10}$/;
2、姓名: const name = /^[\u4E00-\u9FA5\uf900-\ufa2d·s]{2,20}$/;
3、身份证号: const card = /^[1-9][0-9]{5}[1-9][0-9]{3}((0[0-9])|(1[0-2]))(([0|1|2][0-9])|3[0-1])[0-9]{3}([0-9]|X|x)$/;
4、邮箱: const email = ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$;
5、用户名: const uPattern = /^[a-zA-Z0-9_-]{4,16}$/; [ 4到16位(字母,数字,下划线,减号)]
6、车牌号:
const license = /^([冀豫云辽黑湘皖鲁苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼渝京津沪新京军空海北沈兰济南广成使领][a-zA-Z](([DF](?![a-zA-Z0-9]*[IO])[0-9]{4})|([0-9]{5}[DF])))|([冀豫云辽黑湘皖鲁苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼渝京津沪新京军空海北沈兰济南广成使领A-Z]{1}[a-zA-Z0-9]{5}[a-zA-Z0-9挂学警港澳]{1})$/;
七、工具
在线正则表达式测试:tool.oschina.net/regex