正则表达式创建
创建的两种方式
方法一
var reg = /pattern/
方法二
var reg = new RegExp('pattern');
注意!!!
正则表达式严格校验大小写
正则表达式方法
exec()
reg.exec(res) 如果能匹配到的话 返回一个array 未能匹配返回null
var reg = /abc/;
var str1 = 'abcdef';
var str2 = 'abdefg';
console.log(reg.exec(str1))//["abc", index: 0, input: "abcdef", groups: undefined]
console.log(reg.exec(str2))//null
text()
reg.test(res) 匹配成功返回true 匹配失败返回false
console.log(reg.test(str1))//true
console.log(reg.test(str2))//false
c{n}: n个连续的c
var reg = /c{2}/;
var str1 = 'abccde';
var str2 = 'abcdef';
console.log(reg.exec(str1))//[2]
console.log(reg.exec(str2))//null
c{m,n}: c{m,n}:连续的x个c (m<=x<=n)
var reg = /c{3,4}/;
var str1 = 'ascccdf';
var str2 = 'asccccfew';
console.log(reg.exec(str1))//[ccc]
console.log(reg.exec(str2))//[cccc]
c{m,}:连续的x个c (x>=m)
var reg = /c{3,}/;
var str1 = 'abccde';
var str2 = 'abcccef';
var str3 = 'accccceqre'
console.log(reg.exec(str1))//null
console.log(reg.exec(str2))
console.log(reg.exec(str3))
c* :大于等于0个c 相当于{0,}
var reg = /c*/;
var str1 = 'abdef';
var str2 = 'ccccabcccfes';
console.log(reg.exec(str1))//[0]
console.log(reg.exec(str2))//[cccc]
c+:c+:大于等于1个连续的c
var reg = /c+/;
var str1 = 'abdef';
var str2 = 'abcccfes';
console.log(reg.exec(str1))//null
console.log(reg.exec(str2))/[ccc]
c?:大于等于0个小于等于1个c 满足0个就算成功,返回一个空字符串 c{0,1}
var reg = /c?/;
var str1 = 'bdef';
var str2 = 'abcfes';
console.log(reg.exec(str1))//[]
console.log(reg.exec(str2))//[]
?:非贪婪模式 尽可能少的匹配 c{m,n}?
c??:第一个?表示{0,1} 第二个?表示 非贪婪
^c:以c开头
var reg = /^c/;
var str1 = 'cabcdf';
var str2 = 'abcde';
console.log(reg.exec(str1))//[c]
console.log(reg.exec(str2))//null
c$:以c结尾
var reg = /c$/;
var str1 = 'cabcdfc';
var str2 = 'abcde';
console.log(reg.exec(str1))//[c]
console.log(reg.exec(str2))//null
. : 除了换行符\n外的所有字符
//+ 多取
var reg = /.+/;
var str1 = 'cabcdfc';
var str2 = 'abc\nde';
console.log(reg.exec(str1))//[cabcdfc]
console.log(reg.exec(str2))//[abc]
a|b:匹配a或b
var reg = /a|b/;
var str1 = 'cabcdfc';
var str2 = 'abcde';
console.log(reg.exec(str1))
console.log(reg.exec(str2))
先判断括号内
var reg = /^(a|b).+/;
var str1 = 'cabcdfc';
var str2 = 'abcde';
console.log(reg.exec(str1))//null
console.log(reg.exec(str2))//[abcde]
字符集合[abc]:表示a或b或c任意一个字符
var reg = /^[abc]/;
var str1 = 'cabcdfc';
var str2 = 'abcde';
var str3 = 'desasd'
console.log(reg.exec(str1))//[c]
console.log(reg.exec(str2))//[a]
console.log(reg.exec(str3))//null
[a-z]小写字母 [A-Z]大写字母 [0-9]数字 [A-z] 所有字母 [a-zA-Z0-9]字母数字
var reg = /^[a-zA-Z0-9].+/;
var str1 = 'hello00'
var str2 = '00aaa'
console.log(reg.exec(str1))//[hello00]
console.log(reg.exec(str2))//[00aaa]
反字符集合[^abc]:除a或b或c以外的字符
^ [a-z]:以小写字母开头 [^a-z]:除小写字母外的字符
^ 在字符中表示非
^ [A-z] 非字母
var reg = /^[^a-z]+/;//^[a-z]:以小写字母开头 [^a-z]:除小写字母外的字符
var str1 = 'hello'
var str2 = 'HELLO'
console.log(reg.exec(str1))//null
console.log(reg.exec(str2))//[HELLO]
\b: 匹配字符的边界 \B:非边界
var reg1 = /\bc/;
var reg2 = /c\b/
var str1 = 'cello'
var str2 = 'abbwdc'
var str3 = 'acd'
console.log(reg1.exec(str1))//[c]
console.log(reg2.exec(str2))//[c]
console.log(re1.exec(str3))//null
\d:匹配数字 \D:匹配非数字
var reg1 = /\d/;
var reg2 = /\D/
var str1 = '23123'
var str2 = 'as2313'
console.log(reg1.exec(str1))//[2]
console.log(reg2.exec(str2))//[a]
\n:换行 \s:匹配单个空格 \S: 匹配非空格字符
var reg = /\s.+/
var str = 'This is a test String'
console.log(reg.exec(str))//[" is a test String"]
\w:单词字符 相当于字符集和[a-zA-Z0-9_ ]
\W:非单词字符 相当于[…^a-zA-Z0-9_ ]
var reg = /\w.+/
var str = '_abc123'
console.log(reg.exec(str))//['_abc123']
var reg = /(\w)(\w)/
var str = 'blueidea'
console.log(reg.exec(str))//["bl", "b", "l"]
var reg = /(\w)\1///相当于/bb/
var str1 = 'blueidea'
var str2 = 'bblueidea'
console.log(reg.exec(str1))//null
console.log(reg.exec(str2))['bb','b']
?:表示避免子表达式括号内的匹配结果
var reg1 = /^(?:b|c).+/;
var reg2 = /^(b|c).+/;
var str = 'bbs.blueidea.com'
console.log(reg1.exec(str))//[]
console.log(reg2.exec(str))//[b]
(?=) :表示要匹配的字符串 必须紧跟 等号后为限定条件
var reg = /cainiao(?=8)/
var str1 = 'cainiao8'
var str2 = 'cainiao9'
console.log(reg.exec(str1))//cainiao
console.log(reg.exec(str2))//null
(?!pattern):后面不能紧跟某个pattern
var reg = /hello(?!world)/
var str = 'helloworld'
console.log(reg.exec(str))//null
匹配元字符: *,+,?,....
c* 代表大于等于0个c 'c*' 匹配c*
如果想匹配'c*'
var reg = /c\*/
var str = 'abc*'
console.log(reg.exec(str))//c*
全局匹配,修饰符 g 执行后更改lastIndex属性值
var reg = /b/g
var str = 'bbs.blueidea.com'
console.log(reg.lastIndex)//0
console.log(reg.exec(str))
console.log(reg.lastIndex)//1
console.log(reg.exec(str))
不区分大小写,修饰符 i
var reg1 = /c/i
var reg2 = /c/
var str = 'abC'
console.log(reg1.exec(str))//C
console.log(reg2.exec(str))//null
支持正则表达式的String方法 search():返回索引
var str = 'hello world';
console.log(str.search(/world/))//6
console.log(str.search(/World/))//-1 未找到返回-1
match():返回值
var str = 'hello world';
console.log(str.match(/world/))//world
console.log(str.match(/World/))//null
console.log(str.match('e'))//e
replace():代替
var str = 'hello world';
console.log(str.replace(/world/,'friend'))//hellow friend
split():用字符分开
var str = 'hello world';
console.log(str.split(/\s+/))// ["hello", "world"]
正则表达式小练习
匹配手机号
13... 14... 15... 17... 18... 11位
var reg1 = /^1[34578]\d{9}$/
var reg2 = /^(13|14|15|16|18)\d{9}$/
var reg3 = /^1[34578][0-9]{9}$/
匹配电子邮箱
xxxxx@xx.nnn x可以是字母数字'_','.','-' nnn 字母
var reg = /^[\w._-]+\@[a-zA-Z0-9._-]+\.[A-z]{2,4}$/
匹配身份证号
15位全数字 或 18位最后一位可以是X
var reg1 =/^\d{15}$|^\d{17}[X0-9]$/;
var reg2 = /^(\d{14}|\d{17})[X\d]$/;
匹配用户名
4到16位(字母,数字,下划线,减号)
var reg = /^[A-z0-9_-]{4,16}$/