3 回答
TA贡献2012条经验 获得超12个赞
(?=^.{6,7}$)^(([0-9] ?){4}( ?[a-zA-Z]){2})$
将匹配
第1111章
111 1ZZ
1 111ZZ
1111ZZ
第1111章
但不是
9999 1A
11111Z
1111111
11 11 ZZ
https://regex101.com/r/lByOx6/1
编辑:解释
“积极前瞻”部分:
(?=^.{6,7}$)
这仅在字符串满足要求时才匹配,但它不会“消耗”字符。. 是任何字符
{6,7} 是关于重复
如果字符串有 6 个或 7 个字符,则匹配so (?=^.{6,7}$)
,无论如何
然后下面的部分已经“消耗”了字符串,说我想要在开始时重复 4 次数字和可选的空格,在结束时重复 2 次字母和可选的空格。第二部分将接受诸如此类的字符串,1 1 1 1 Z Z
但由于这些字符串超过 7 个字符,因此第一部分不会让字符串匹配。
TA贡献1831条经验 获得超9个赞
我建议通过减少所有你似乎不感兴趣的空格来提前简化问题:
var candidate = input.replaceAll(/\s/mg, '');
那么正则表达式就是:/^\d{4}[A-Za-z]{2}$/
但是,如果您需要验证实际上没有前导或尾随空格,您可以提前验证并立即返回否定结果。
TA贡献1824条经验 获得超5个赞
另一种选择是检查字符串是否在第一个和最后一个非空白字符之间包含可选空格。
然后匹配第一个数字后跟由可选空格分隔的 3 位数字和 2 或 3 倍的字符 a-zA-Z 或空格。
使用不区分大小写的匹配:
^(?=\S+ ?\S+$)\d(?: ?\d){3}[A-Z ]{2,3}$
解释
^
字符串的开始(?=
正面前瞻,断言右边是什么\S+ ?\S+$
匹配第一个和最后一个非空白字符之间的可选空格)
关闭前瞻\d(?: ?\d){3}
匹配一个数字并重复 3 次可选空格和一个数字[a-zA-Z ]{2,3}
匹配 2-3 次字符 a-zA-Z 或空格$
字符串结束
添加回答
举报