LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 160|回复: 0

捕获组

[复制链接]
发表于 2024-1-26 23:28:17 | 显示全部楼层 |阅读模式
模式的一部分可以用括号括起来 (...)。这被称为“捕获组(capturing group)”。

这有两个影响:

它允许将匹配的一部分作为结果数组中的单独项。
如果我们将量词放在括号后,则它将括号视为一个整体。
示例
让我们看看在示例中的括号是如何工作的。

示例:gogogo
不带括号,模式 go+ 表示 g 字符,其后 o 重复一次或多次。例如 goooo 或 gooooooooo。

括号将字符组合,所以 (go)+ 匹配 go,gogo,gogogo等。

alert( 'Gogogo now!'.match(/(go)+/ig) ); // "Gogogo"
示例:域名
让我们做些更复杂的事 —— 搜索域名的正则表达式。

例如:

mail.com
users.mail.com
smith.users.mail.com
正如我们所看到的,一个域名由重复的单词组成,每个单词后面有一个点,除了最后一个单词。

在正则表达式中是 (\w+\.)+\w+:

let regexp = /(\w+\.)+\w+/g;

alert( "site.com my.site.com".match(regexp) ); // site.com,my.site.com
搜索有效,但该模式无法匹配带有连字符的域名,例如 my-site.com,因为连字符不属于 \w 类。

我们可以通过用 [\w-] 替换 \w 来匹配除最后一个单词以外的每个单词:([\w-]+\.)+\w+。

示例:电子邮件
扩展一下上面这个示例。我们可以基于它为电子邮件创建一个正则表达式。

电子邮件的格式为:name@domain。名称可以是任何单词,允许使用连字符和点。在正则表达式中为 [-.\w]+。

模式:

let regexp = /[-.\w]+@([\w-]+\.)+[\w-]+/g;

alert("my@mail.com @ his@site.com.uk".match(regexp)); // my@mail.com, his@site.com.uk
该正则表达式并不完美的,但多数情况下都能正确匹配,并且有助于修复输入邮箱时的意外错误输入。唯一真正可靠的电子邮件检查只能通过发送电子邮件来完成。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表