首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果符号不存在,则为LookAround或默认正则表达式

如果符号不存在,则为LookAround或默认正则表达式
EN

Stack Overflow用户
提问于 2022-05-08 07:56:30
回答 1查看 22关注 0票数 0

我有这个大梁

代码语言:javascript
复制
^\d+(?<=\d)_?(?=\d)\d*

我最初的目标是匹配这些模式:

  • 5
  • 55
  • 5_5
  • 55_5

但忽略

  • _5
  • 5_
  • _

据我所知,如果它被数字包围,它至少匹配一行开头的1位数,如果它被数字包围,则匹配anderscore。很简单。所以,

  • 5_5通过了,
  • 555_555也通过了,
  • _5没有通过,这是预料中的,
  • _也没有通过。

此外,还通过了55,这是很好的。

但出于某种原因,5也没有通过。为什么?它是个位数,即使以后没有下划线,它也必须通过。知道为什么会发生这种事吗?谢谢。

https://regex101.com/上测试

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-08 08:08:17

原因是因为模式应该至少匹配2位数字。

这是由于^\d+和向右(?=\d)断言另一个数字。

在您的模式中,您可以删除查找断言,因为您还匹配要断言的数字,因此它们是多余的。

您的模式可以编写为^\d+_?\d+,您可以看到必须至少匹配两个数字与一个可选的下划线。

要获得所需的当前匹配,可以将模式编写为:

代码语言:javascript
复制
^\d+(?:_\d+)?$

解释

  • 字符串的^开始
  • \d+匹配1+数字
  • (?:_\d+)?还可以选择匹配_和1+数字(以防止末尾出现下划线)
  • 字符串的$末端

Regex演示

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

https://stackoverflow.com/questions/72159089

复制
相关文章

相似问题

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