1.正则表达式
1.1定义及创建
-
描述字符串的“构成模式”,经常被用于检查字符串
是否符合预定的格式要求
-
”按位“来描述规则
-
/^\d$/
var regexp = /^\d{6}$/;//6位数字 var regexp1 = new RegExp('^\\d{6}$'); var regexp = /^m\d{6}n$/;//以m开头,n结尾,中间6位数字 var str1='123456'; regexp.test(str1); //test typeof regexp //object
创建
- 使用
/内容/
的语法形式,可以快速创建正则表达式- 也可以使用
new RegExp('内容')
的形式,创建正则表达式。- 使用
typeof
运算符检查正则表达式的类型,结果是object
。- 两个正则表达是
不会相等
的,因为引用类型比较的是内存地址是否相等。
1.2元字符
-
开头
^
结尾$
-
使用
new RegExp()
写法,反斜杠需要多写一个\
-
//某快递公司运单号形式是这样的:123-4567-890,请使用正则表达式检查某字符串是否符合此格式 var regexp = /^\d{3}-\d{4}-\d{3}$/; //只要没有写$,就会直接验证已写的部分,所以就算验证字符串后面乱写也没事 var str1 = '444-5555-000'; console.log(regexp.test(str1)); //某产品秘钥形式 xxx-xxxx-xxx,其中x表示字母数字或者下划线 var regexp = /^\w{3}-\w{4}-\w{3}$/; var str = 'abc-_ab_-123'; console.log(regexp.test(str));
-
字符转义:在特殊字符之前的反斜杠
\
表示下一个字符不是特殊字符,应该按照字面理解;最好就是在符号前面都加一个\
/^.$/
->检查字符串是不是任意字符
/^\.$/
->检查字符串是不是一个点
/^\\$/
->检查字符串是不是一个\
扩展:
-
正则中使用竖线
|
表示或,表示只匹配指定几项之间的一项 -
x|y表示匹配x或y,也就是说两种中匹配一个,只要匹配到其中一个,就不会再匹配另外一个了 var str = "ab"; var reg = /a|ab/; console.log(reg.exec(str)); //a var str1 = "imoochtmlcccjs" var str2 = "jsimooccss" var str3 = "cssimoochtml" var reg = /html|css|js/ console.log(reg.exec(str1)) // html console.log(reg.exec(str2)) // js console.log(reg.exec(str3)) // css //匹配纯数字或者纯字母的问题 var str1 = '1111'; var str2 = 'xuting'; var str3 = '111xuting'; var reg = /^\d+$|^[a-zA-Z]+$/
1.3方括号表示法
-
[xyz]
,可以创建一个字符集合,表示匹配方括号中的任意字符; -
方括号中也需要给特殊字符转义比如
\.
-
方括号中的字符之间的关系都是或者
-
/^[by]\d{7}$/
表示第一位是一个字母,要么是b
要么是y
-
//验证某字符串是否是5位字母,大小写均可 /^[A-Za-z]{5}$/ //验证某字符串是否是5位,且仅有小写字母、点构成 /^[a-z\.]{5}$/ //验证某字符串是否是4位小写字母,且最后一位不能是m字母 /^[a-z]{3}[a-ln-z]$/ //漏掉m
1.4量词
-
//手机号码 /^1\d{10}$/ //以字母开头,中间是任意位数字,最少一位,并以字母结尾 /^[A-Za-z]\d+[A-Za-z]$/ // \d+表示至少一位数字 //网站 www.(任意字符最少一位).com/.com.cn /^www\.\w+\.com(\.cn)?$/ // .cn可有可无
1.5修饰符
var re = /m/gi; var re = new RegExp('m','gi');
1.6正则表达式的相关方法
-
+
表示贪婪的,尽可能多的匹配 -
var regexp = /\d+/g
;会进行逐条遍历,调用null
之后又循环 -
result[0]表示结果
1.7字符串的相关正则方法
-
var str = 'abc123def4567' var res1 = str.search(/\d+/g);//3 类似于indexof方法;找不到为-1;全局匹配g在search中没用。 var res2 = str.match(/\d+/g);//['123','4567'] 得到一个数组;找不到为null var res3 = str.replace(/[a-z]+/g,'*');//+连续匹配;将小写字母串都换成一个* *123*4567 var res4 = str.split(/\d+/g);//['abc','def',''];根据数字来将字符串拆分 var res5 = str.split(/[ab]/);//既可以以a拆分又可以以b拆分