我正试图找出只接受以下字符串的Regex。
我的理由是:
/^(T|[0-9]){1}(D|[0-9]){1}([0-9]){5,6}$/但是它没有通过'D234567‘和'D2345678’的单元测试
发布于 2022-04-22 20:13:57
您可以将模式写成:
^(?:\d{7,8}|[TD]\d{6,7}|TD\d{5,6})$解释
^开始(?:非捕获组\d{7,8}匹配7-8位数|或[TD]\d{6,7}匹配T或D和6-7位数字。|或TD\d{5,6}匹配TD和5-6位数字)关闭非捕获组$末端发布于 2022-04-22 20:16:07
我在发完这个问题后就想出来了。只需在T++后面加上“\D”,如下所示。
/^(T|D|[0-9]){1}(D|[0-9]){1}([0-9]){5,6}$/
发布于 2022-04-24 13:05:29
const r = /^(?=.{7,8}$)T?D?\d+$/是最简单的解决办法。下面是所发生的事情的明细:
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/),
/$/
)你可以试试这里
做了大量的测试。
https://stackoverflow.com/questions/71974113
复制相似问题