JavaScript正则表达式(一)

正则表达式创建方式

两种:

  1. var reg = /xxxxx/
  2. 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

posted @ 2018-11-27 13:04  白白白白白白白  阅读(130)  评论(0编辑  收藏  举报