在正则表达式语法中,定义了一组重复类量词,如下所示。它们定义了重复匹配字符的确数或约数。
- n+ 匹配任何包含至少一个 n 的字符串。
- n* 匹配任何包含零个或多个 n 的字符串。
- n? 匹配任何包含零个或一个 n 的字符串。
- n{x} 匹配包含x 个n 的序列的字符串。
- n{x,y} 匹配包含x 或y 个n 的序列的字符串。
- n{x,} 匹配包含至少x 个n 的序列的字符串。
【示例】下面结合示例演示说明。先设计一个字符串:
var s = "ggle gogle google gooogle goooogle gooooogle goooooogle gooooooogle goooooooogle"
- 如果仅匹配单词ggle和gogle,可以设计:
var r = /go?gle/g; //匹配前一项字符o0次或1次 var a = s.match(r); //返回数组["ggle", "gogle"]
量词"?"表示前面字符或子表达式为可有可无,等效于:
var r = /go{0,1}gle/g; //匹配前一项字符o0次或1次
var a = s.match(r); //返回数组["ggle", "gogle"]
- 如果匹配第4个单词gooogle,可以设计:
var r = /go{3}gle/g; //匹配前一项字符o重复显示3次
var a = s.match(r); //返回数组["gooogle"]
等效于:
var r = /gooogle/g; //匹配字符gooogle var a = s.match(r); //返回数组["gooogle"]
- 如果匹配第4个到第6个之间的单词,可以设计:
var r = /go{3,5}gle/g; //匹配第4个到第6个之间的单词
var a = s.match(r); //返回数组["gooogle", "goooogle", "gooooogle"]
- 如果匹配所有单词,可以设计:
var r = /go*gle/g; //匹配所有的单词 var a = s.match(r); //返回数组["ggle", "gogle", "google", "gooogle", "goooogle", "gooooogle", "goooooogle", "goooooooogle", "gooooooooogle"]
量词"*"表示前面字符或子表达式可以不出现,或者重复出现任意多次。等效于:
var r = /go{0,}gle/g; //匹配所有的单词
var a = s.match(r); //返回数组["ggle", "gogle", "google", "gooogle", "goooogle", "gooooogle", "goooooogle", "goooooooogle", "gooooooooogle"]
- 如果匹配包含字符"o"的所有单词,可以设计:
var r = /go+gle/g; //匹配的单词中字符"o"至少出现1次 var a = s.match(r); //返回数组["gogle", "google", "gooogle", "goooogle", "gooooogle", "goooooogle", "goooooooogle", "gooooooooogle"]
量词"+"表示前面字符或子表达式至少出现1次,最多重复次数不限。等效于:
var r = /go{1,}gle/g; //匹配的单词中字符"o"至少出现1次
var a = s.match(r); //返回数组["gogle", "google", "gooogle", "goooogle", "gooooogle", "goooooogle", "goooooooogle", "gooooooooogle"]
【注意】
重复类量词总是出现在它们所作用的字符或子表达式后面。如果想作用多个字符,需要使用小括号把它们包裹在一起形成一个子表达式。