在 JavaScript 中,我们可以使用正则表达式来查找和匹配字符串中的特定模式。正则表达式中的括号可以用来捕获匹配的子字符串,并将其存储在一个组中。但是有时我们需要捕获多个子字符串并将它们存储在不同的组中,这时候我们可以使用正则表达式组任意数量的方法。
捕获任意数量的分组
在 JavaScript 中,我们可以使用 ()
来定义一个分组,并在正则表达式中使用 $1
、$2
、$3
等来引用这些分组。
例如,下面的正则表达式可以匹配类似 "2018-01-01" 这样的日期格式:
const regex = /(\d{4})-(\d{2})-(\d{2})/; const match = regex.exec("2018-01-01"); console.log(match[1]); // 输出 2018 console.log(match[2]); // 输出 01 console.log(match[3]); // 输出 01
在上面的例子中,我们定义了三个分组来捕获年、月、日三个部分。然后,我们使用 exec()
方法来执行正则表达式,并将匹配结果存储在 match
对象中。最后,使用 match
对象中的索引来获取每个分组的值。
但是,如果我们不知道要捕获的分组数量呢?这时候,我们可以使用正则表达式中的 +
或者 *
来匹配任意数量的分组。
例如,下面的正则表达式可以匹配一个包含多个数值的字符串,并将每个数值存储在不同的分组中:
const regex = /(\d+)\D+(\d+)\D+(\d+)/; const match = regex.exec("1,2,3,4,5"); console.log(match[1]); // 输出 1 console.log(match[2]); // 输出 2 console.log(match[3]); // 输出 3
在上面的例子中,我们使用 \d+
表示匹配一个或多个数字,然后使用 \D+
表示匹配一个或多个非数字字符。由于我们不知道要匹配多少个数字和非数字字符,我们将 \d+\D+
放到一个分组中,并使用 +
表示匹配一个或多个该分组。最后,我们在正则表达式中定义了三个分组来捕获每个数字。
捕获可选分组
除了匹配任意数量的分组,我们还可以使用正则表达式中的 ?
来表示一个可选的分组。这样,在执行正则表达式时,如果某个分组中没有匹配到任何内容,那么该分组将会被忽略。
例如,下面的正则表达式可以匹配一个包含可选区号的电话号码,并将区号和号码存储在不同的分组中:
const regex = /(\d{3})?-?(\d{7})/; console.log(regex.exec("123-4567890")); // 输出 ["123-4567890", "123", "4567890"] console.log(regex.exec("1234567890")); // 输出 ["1234567890", undefined, "1234567"]
在上面的例子中,我们使用 ()
来定义了两个分组:第一个分组匹配一个包含三个数字的区号,并加了一个 ?
表示该分组是可选的;第二个分组匹配一个包含七个数字的电话号码。
当输入字符串包含区号时,第一个分组会匹配到相应的内容并存储;否则,第一个分组将会被忽略。无论哪种
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/12774