首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex -匹配捕获组中的第一个和最后一个字符

Regex -匹配捕获组中的第一个和最后一个字符
EN

Stack Overflow用户
提问于 2018-09-21 14:24:41
回答 3查看 938关注 0票数 1

我想要捕获捕获组中的第一个和最后一个字符。

我现在的RegEx是-

代码语言:javascript
复制
([\w\.]+)@([\w]+)\.com

例如,如果有一个电子邮件地址-

代码语言:javascript
复制
xyz@test.com

这是输出-

代码语言:javascript
复制
Full match  0-12    `xyz@test.com`
Group 1.    0-3 `xyz`
Group 2.    4-8 `test`

电子邮件地址可以包含字母数字和句点值。

如果我想减少Group 1,使其只以字母数字值开始和结束,该如何做?

我想修改这个捕获组-

代码语言:javascript
复制
 ([\w\.]+)

所需的输出为-

代码语言:javascript
复制
xyz.@test.com Invalid
.xyz@test.com Invalid
xy.z@test.com Valid
EN

回答 3

Stack Overflow用户

发布于 2018-09-21 14:38:37

要告知engine匹配起始位置的英文字母数字字符和@之前的一个字符,您需要执行以下操作:

代码语言:javascript
复制
^([a-zA-Z0-9][\.a-zA-Z0-9]*[a-zA-Z0-9])@([a-zA-Z0-9]+)\.com$

注意:\w包含您可能不需要的_

但是这不允许用户名只有一个字符。所以你必须稍微修改一下:

代码语言:javascript
复制
^([a-zA-Z0-9]+(?:\.+[a-zA-Z0-9]+)*)@([a-zA-Z0-9]+)\.com$

此外,这不应该被认为是一个好的电子邮件验证器。但是,根据RFC 822的说法,你似乎缩小了与.com TLD的匹配范围,所以我认为这是一个非常具体的要求,否则它会将域名限制为字母数字,并且不允许更多在电子邮件地址中有效的字符。这足以从用户输入中捕获电子邮件地址:

代码语言:javascript
复制
^[^\s@]+@[^\s@]+$
票数 2
EN

Stack Overflow用户

发布于 2018-09-21 14:45:26

这是可行的:

代码语言:javascript
复制
^([0-9a-zA-Z][a-zA-Z0-9_\.]*)(?<!\.)@([a-zA-Z0-9_]+)\.com$

Demo

基本上,它尝试在开始时匹配字母数字字符,然后[a-zA-Z0-9_\.] 0或更多次。在它到达@之前,它会查看后面是否有一个点(如果不是字母数字,就一定是一个点)。

票数 1
EN

Stack Overflow用户

发布于 2018-09-21 14:51:49

试试这个正则表达式- (^\w+\w)@(\w+).com

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52437788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档