目录
正则表达式创建方式
两种:
- var reg = /xxxxx/
var reg = new RegExp('xxxxx') 或 var reg = new RegExp(/xxxxx/)
JavaScript正则表达式对象内置方法
- exec() 与字符串方法match()类似
- test()
元字符
( [ { ^ $ | ) ? * + .
/[abc]/ 意思是,在一个位置可以出现的字符可能为a或b或c
eg:/[abc]/.test('a') === true
(): 允许重复多个字符(分组)
eg:// count字符串连续出现两次 countcount/(count){2}/.test('countcount') === true// 匹配 bad 或 dad 并且每个只能出现零次或者一次([bd]ad?)
量词
-
- 出现0次或者多次
- ? 出现零次或者一次
-
- 出现一次或者多次
- {n} 对应n次
- {n,m} 对应n~m次
- {n, } 至少n次
贪性量词 惰性量词
贪性量词: 指上面所有的简单量词
特点 : 匹配时,拿到整个字符串,从后往前,不匹配的去除 eg:var str = 'aabbcccddaaabbbccccbbbb111'var reg = /.*ccc/g //贪婪console.log(reg.exec(str)) //["aabbccddaaabbbcccc", index: 0, input: "aabbccddaaabbbccccbbbb111", groups: undefined]0: "aabbccddaaabbbcccc"groups: undefinedindex: 0input: "aabbccddaaabbbccccbbbb111"length: 1__proto__: Array(0)]console.log(str.match(reg)) //["aabbccddaaabbbcccc"]
惰性量词: 在简单量词后加'?'
特点: 与贪性量词相反,从首个字符开始匹配var str = 'aabbcccddaaabbbccccbbbb111'var reg = /.*?ccc/g;console.log(reg.exec(str)) console.log(str.match(reg))// ["aabbccc", index: 0, input: "aabbcccddaaabbbccccbbbb111", groups: undefined]// ["aabbccc", "ddaaabbbccc"]
分组
"baddad".match(/([bd]ad?)*/)结果: ["baddad", "dad", index: 0, input: "baddad", groups: undefined]第一个参数 为 正则匹配结果, 第二个参数 为 分组(括号内)的表达式匹配的结果
如果不想匹配到括号内的结果, 可以使用非捕获性分组?:
"baddad".match(/(?:[bd]ad?)*/)结果:["baddad", index: 0, input: "baddad", groups: undefined]
候选 (管道符 | )
var reg = /this is a apple|banana|orange/reg.test('this is a apple') === truereg.test('this is a banana') === true