Appearance
重复匹配
本节目标:理解“重复匹配”的核心思路,并能把它用于实际开发或面试表达。 在正则表达式语法中,定义了一组重复类量词,如表所示。它们定义了重复匹配字符的确数或约数。
| |
**量词****描述**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";1) 如果仅匹配单词 ggle 和 gogle,可以设计:**var** r = /go?gle/g;**var** a = s.match(r);量词==?==表示前面字符或子表达式为可有可无,等效于:**var** r = /go{0,1}gle/g;**var** a = s.match(r);2) 如果匹配第 4 个单词 gooogle,可以设计:**var** r = /go{3}gle/g;**var** a = s.match(r);等效于:**var** r = /gooogle/g;**var** a = s.match(r);3) 如果匹配第 4 个到第 6 个之间的单词,可以设计:**var** r = /go{3,5}gle/g;**var** a = s.match(r);4) 如果匹配所有单词,可以设计:**var** r = /go*gle/g;**var** a = s.match(r);量词==*==表示前面字符或表达式可以不出现,或者重复出现任意多次。等效于:
**var** r = /go(0,)gle/g;**var** a = s.match(r);5) 如果匹配包含字符“o”的所有词,可以设计:**var** r = /go+gle/g;**var** a = s.match(r);量词==+==表示前面字符或子表达式至少出现 1 次,最多重复次数不限。等效于:
**var** r = /go{1,}gle/g;**var** a = s.match(r);重复类量词总是出现在它们所作用的字符或子表达式后面。如果想作用于多个字符,需要使用小括号把它们包裹在一起形成一个子表达式。
