正则基础之 捕获组(capture group)
介绍
在正则表达式中,捕获组是一个由括号包围的子表达式。在使用正则表达式匹配字符串时,可以通过捕获组从匹配到的字符串中提取想要的部分。
捕获组可以使用圆括号中的数字引用到,如果有多个捕获组,可以通过捕获组的序号来区分哪一个捕获组是被引用的。除了序号之外,也可以给捕获组设置名字,用于更清晰、方便的引用。
示例
下面是两个具体的示例,在这些示例中都展示了如何在正则表达式中使用捕获组。为了更清晰方便,我们使用JavaScript语言对这些示例进行了实现。
示例一
假设我们有一个字符串,想要从字符串中提取出其中的手机号码。这时候可以使用正则表达式和捕获组来快速实现:
const str = 'Hi,我的手机号是15555555555, bye!'
const reg = /1[35789]\d{9}/ // 匹配手机号码的正则表达式
const match = str.match(reg) // 匹配字符串
if (match) {
const phone = match[0] // 取出第一个捕获组的内容
console.log('匹配到的手机号码是:', phone)
} else {
console.log('未匹配到手机号码')
}
在这个示例中,我们使用了一个正则表达式来匹配手机号码,保存在一个变量 reg
中。然后我们使用字符串的 match
方法来对字符串进行匹配,得到一个匹配结果 match
。
在 match
结果中,每个匹配到的字符串都是一个数组元素。由于我们只匹配了一个电话号码,所以 match
只包含一个元素。我们通过索引 0
来取出这个元素,并保存在 phone
变量中。
示例二
假设有一个字符串,其中包含了多个邮箱地址。我们想要从这些邮箱地址中提取出邮箱的用户名和域名。这里的用户名和域名之间通过 @
符号分开。这时可以使用正则表达式的捕获组来实现:
const str = '我的电子邮箱是test1@test.com,还有一个邮箱是test2@test.com'
const reg = /([\w-.]+)@([\w\-]+\.\w+)/g // 匹配所有邮箱地址的正则表达式
const matches = [...str.matchAll(reg)] // 匹配字符串中的所有邮箱地址
for (const match of matches) {
const username = match[1] // 取出用户名
const domain = match[2] // 取出域名
console.log(`匹配到的邮箱用户名是:${username},域名是:${domain}`)
}
在这个示例中,我们使用了一个正则表达式来匹配所有的邮箱地址,并将其保存在一个变量 reg
中。我们使用字符串的 matchAll
方法来对字符串进行匹配,得到一个迭代器对象。
在每个匹配结果中,第一个捕获组保存了邮箱的用户名,第二个捕获组保存了邮箱的域名。我们通过取出这两个捕获组的内容,分别保存在 username
和 domain
变量中,并将其打印出来。
结论
通过上述示例和讲解,我们了解了正则表达式中的捕获组的使用方法。它可以帮助我们从匹配到的字符串中提取想要的内容,并提供了方便的方式来访问这些内容。在实际使用中,还可以和一些高级用法结合使用,如非捕获组、正则表达式替换等等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:正则基础之 捕获组(capture group) - Python技术站