正则表达式创建方式
两种:
- 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') === true
reg.test('this is a banana') === true