1、概念
正则表达式的作用:匹配特殊字符或有特殊搭配原则的字符的最佳选择
2、创建方式
(1)字面量
var reg = /cd/
var reg = /cd/igm
var str = "abcdefg"
reg.test(str) // true
(2)构造函数
var reg = new RegExp("abc")
var reg = new RegExp("abc", "igm")
var str = "abcdef"
reg.test(str) // true
3、修饰符
(1)i
忽略大小写匹配
(2)g
全局匹配
(3)m
多方匹配
4、正则方法
reg.test( str )
str.match( reg )
5、表达式
(1)[ ab ]
每个表达式代表一位,表示匹配a或者b
[0123456789]:表示匹配0-9范围内的数
[0-9]:表示匹配0-9范围内的数
[0-9A-z]:表示匹配0-9、A-Z、a-z范围内的值
实例1:
var reg = /[0123456789][0123456789][0123456789]/g
var str = "3245fdk4590dfkl823567dfjhk"
str.match(reg) // ["324", "459", "823", "567"]
实例2:
var reg = / [ab][cd][d]/g
var str = "abcd"
str.match(reg) // ["bcd"]
(2)[ ^ab ]
表示不能匹配a和b,其它都可以匹配
实例1:
var reg = /[^ab]/g
var str = "acde"
str.match(reg) // ["c", "d", "e"]
实例2:
var reg = /[^ab][^ab]/g
var str = "acde"
str.match(reg) // ["cd"]
(3)( )
实例1:
var reg = /(abc | bcd)/g
var str = "abcdefbcdf"
str.match(reg) // ["abc", "bcd"]
实例2:
var reg = /(abc | bcd)[0-9]/g
var str = "bcd53dfs"
str.match(reg) // ["bcd5"]
6、元字符
(1)w
w表示区间是[0-9A-z_]
实例1:
var reg = /wab5/
var str = "tyab5"
str.match(reg) // ["yab5"]
(2)W
表示[^w]
实例2:
var reg = /Wab5/
var str = "t*ab5"
str.match(reg) // ["*ab5"]
(3)d
表示[0-9]
(4)D
表示[^0-9]
(5)s
匹配空白字符
表示[ vf ]
(6)S
表示[^s]
(7)
表示单词边界
var reg = /cde/g
var str = "abc cde fcdeh"
str.match(reg) // ["cde"]
(8)B
表示非单词边界
7、量词
(1)n+
表示n可以出现1次或多次
(2)n*
表示n可以出现0次或多次
实例1:
var reg = /w+/g
var str = "abc"
str.match(reg) // ["abc"]
(3)n?
表示n可以出现0次或1次
实例1:
var reg = /w?/g
var str = "aaa"
str.match(reg) // ["a", "a", "a", ""]
(4)n{x}
表示一次匹配x个n
实例1:
var reg = /w{3}/g
var str = "abcedfg"
str.match(reg) // ["abc", "edf"]
(5)n{x, y}
表示一次匹配y个n,后面不够的最少可以匹配x个n
y值可以不写,表示x到正无穷
实例1:
var reg = /w{3,5}/g
var str = "ackdeewjkttld"
str.match(reg) // ["ackde", "ewjkt", "tld"]
(6)^和$
^n:表示匹配以n开头的
n$:表示匹配以n结束的
实例1:
var reg = /ed$/g
var str = "abedced"
str.match(reg) // ["ed"]
实例2:
var reg = /^abc$/g // 表示以同一个abc开始和结束
var str = "abcabc"
str.match(reg) // null
实例3:
var reg = /^d[sS]*d$/g
var str = "123abc123"
str.match(reg) // ["123abc123"]
8、reg.exec(str)
var reg = /ab/g
var str = "ababab"
reg.lastIndex // 0
reg.exec(str) // ["ab"]
reg.lastIndex // 2
reg.exec(str) // ["ab"]
reg.lastIndex // 4
reg.exec(str) // ["ab"]
reg.lastIndex // 6
reg.exec(str) // null
reg.lastIndex // 0
reg.exec(str) // ["ab"]
(9)反向匹配
实例1:
var str = "aaaa"
var reg = /(w)111/g
str.match(reg) // ["aaaa"]
实例2:
var str = "aaaabbbb"
var reg = /(w)111/g
str.match(reg) // ["aaaa", "bbbb"]
实例3:
var str = "aabb"
var reg = /(w)111/g
str.match(reg) // null
实例3:
var str = "aabb"
var reg = /(w)1(w)2/g
str.match(reg) // ["aabb"]
10、可以使用正则表达式的字符串方法
(1)str.search( reg )
匹配到字符返回字符索引,匹配不到返回-1
(2)str.split(reg)
(3)str.replace(reg)
实例1:
var str = "ab"
str.replace("a", "b") // ba
实例2:
var reg = /a/
var str = "aa"
str.replace(reg, "b") // ba
实例3:将aa变成bb
var reg = /a/g
var str = "aa"
str.replace(reg, "b") // bb
实例4:将aabb变成bbaa
var str = "aabb"
var reg = /(w)1(w)2/g
str.replace(reg, "$2$2$1$1") // bbaa
等同
str.replace(reg, function($, $1, $2){
retrun $2 + $2 + $1 + $1
})
实例5:将"the-first-name"变成"theFirstName"
var reg = /-(w)/g
var str = "the-first-name"
str.replace(reg, function($, $1){
return $1.toUpperCase( )
})
11、正向断言
(1)?=n
实例1:
var str = "abaaaa"
var reg = /a(?=b)/g
str.match(reg) // ["a"]
实例2:
var str = "abaaaa"
var reg = /a(?!b)/g
str.match(reg) // ["a", "a", "a", "a"]
实例3:
var str = "aaa"
var reg = /a+/g
str.match(reg) // ["aaa"]
实例4:
var str = "aaa"
var reg = /a+?/g
str.match(reg) // ["a", "a", "a"]