如何捕获JavaScript正则表达式组任意数量?

在 JavaScript 中,我们可以使用正则表达式来查找和匹配字符串中的特定模式。正则表达式中的括号可以用来捕获匹配的子字符串,并将其存储在一个组中。但是有时我们需要捕获多个子字符串并将它们存储在不同的组中,这时候我们可以使用正则表达式组任意数量的方法。

捕获任意数量的分组

在 JavaScript 中,我们可以使用 () 来定义一个分组,并在正则表达式中使用 $1$2$3 等来引用这些分组。

例如,下面的正则表达式可以匹配类似 "2018-01-01" 这样的日期格式:

----- ----- - --------------------------
----- ----- - -------------------------

---------------------- -- -- ----
---------------------- -- -- --
---------------------- -- -- --

在上面的例子中,我们定义了三个分组来捕获年、月、日三个部分。然后,我们使用 exec() 方法来执行正则表达式,并将匹配结果存储在 match 对象中。最后,使用 match 对象中的索引来获取每个分组的值。

但是,如果我们不知道要捕获的分组数量呢?这时候,我们可以使用正则表达式中的 + 或者 * 来匹配任意数量的分组。

例如,下面的正则表达式可以匹配一个包含多个数值的字符串,并将每个数值存储在不同的分组中:

----- ----- - ------------------------
----- ----- - ------------------------

---------------------- -- -- -
---------------------- -- -- -
---------------------- -- -- -

在上面的例子中,我们使用 \d+ 表示匹配一个或多个数字,然后使用 \D+ 表示匹配一个或多个非数字字符。由于我们不知道要匹配多少个数字和非数字字符,我们将 \d+\D+ 放到一个分组中,并使用 + 表示匹配一个或多个该分组。最后,我们在正则表达式中定义了三个分组来捕获每个数字。

捕获可选分组

除了匹配任意数量的分组,我们还可以使用正则表达式中的 ? 来表示一个可选的分组。这样,在执行正则表达式时,如果某个分组中没有匹配到任何内容,那么该分组将会被忽略。

例如,下面的正则表达式可以匹配一个包含可选区号的电话号码,并将区号和号码存储在不同的分组中:

----- ----- - --------------------
--------------------------------------- -- -- --------------- ------ ----------
-------------------------------------- -- -- -------------- ---------- ----------

在上面的例子中,我们使用 () 来定义了两个分组:第一个分组匹配一个包含三个数字的区号,并加了一个 ? 表示该分组是可选的;第二个分组匹配一个包含七个数字的电话号码。

当输入字符串包含区号时,第一个分组会匹配到相应的内容并存储;否则,第一个分组将会被忽略。无论哪种

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/12774