Skip to content

重复匹配 ​

本节目标:理解“重复匹配”的核心思路,并能把它用于实际开发或面试表达。 在正则表达式语法中,定义了一组重复类量词,如表所示。它们定义了重复匹配字符的确数或约数。

| |

**量词**
**描述**
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);

重复类量词总是出现在它们所作用的字符或子表达式后面。如果想作用于多个字符,需要使用小括号把它们包裹在一起形成一个子表达式。

本站总访问 — 次