首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >包含不同字母的正则表达式问题

包含不同字母的正则表达式问题
EN

Stack Overflow用户
提问于 2022-04-22 20:11:23
回答 3查看 45关注 0票数 2

我正试图找出只接受以下字符串的Regex。

  • 7和8个数字:'1234567‘和'12345678’
  • 以T开头的7和8个数字:'T234567‘和'T2345678’
  • 以D开头的7和8个数字:'D234567‘和'D2345678’
  • 以TD开头的7和8个数字:'TD34567‘和'TD345678’

我的理由是:

代码语言:javascript
运行
复制
/^(T|[0-9]){1}(D|[0-9]){1}([0-9]){5,6}$/

但是它没有通过'D234567‘和'D2345678’的单元测试

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-22 20:13:57

您可以将模式写成:

代码语言:javascript
运行
复制
^(?:\d{7,8}|[TD]\d{6,7}|TD\d{5,6})$

解释

  • 字符串的^开始
  • 替代方案的(?:非捕获组
    • \d{7,8}匹配7-8位数
    • |
    • [TD]\d{6,7}匹配TD和6-7位数字。
    • |
    • TD\d{5,6}匹配TD和5-6位数字

  • )关闭非捕获组
  • 字符串的$末端

Regex演示

票数 4
EN

Stack Overflow用户

发布于 2022-04-22 20:16:07

我在发完这个问题后就想出来了。只需在T++后面加上“\D”,如下所示。

/^(T|D|[0-9]){1}(D|[0-9]){1}([0-9]){5,6}$/

票数 0
EN

Stack Overflow用户

发布于 2022-04-24 13:05:29

代码语言:javascript
运行
复制
const r = /^(?=.{7,8}$)T?D?\d+$/

是最简单的解决办法。下面是所发生的事情的明细:

代码语言:javascript
运行
复制
import {lookAhead, maybe, sequence, suffix} from "compose-regexp"

const r = sequence(
  // start anchor
  /^/,
  // are there exactly 7 or 8 characters before the end?
  lookAhead(suffix([7,8], /./), /$/),
  // optionally match a 'T'
  maybe('T'),
  // optionally match a 'D'
  maybe('D'),
  // match numbers until the end
  suffix('+', /\d/),
  /$/
)

你可以试试这里

做了大量的测试。

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

https://stackoverflow.com/questions/71974113

复制
相关文章

相似问题

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