如何编写Regex匹配指定规则的4/5/6位数字,处理前导零后的截取需求
正则匹配解决方案
匹配前导零之后最后4/5位数字
直接使用如下正则即可,捕获组1就是你需要的结果:
0*(\d{4,5})$
逻辑说明:
0*匹配任意数量的前导零(\d{4,5})捕获连续4-5位数字$锚定到字符串末尾,确保取的是末尾的数字段
完整适配所有规则的解决方案
结合你给出的全部匹配规则(含不足4位补前导零到4位、6位非零开头数字完整保留的要求),可以通过两步处理实现:
- 先提取原字符串的有效数字段,过滤多余前导零和超出6位的前缀:
^0*(\d{1,6})$
- 对捕获到的有效数字按长度处理:
- 长度为5/6且首字符为1-9:直接返回完整字符串
- 长度≤4:左侧补0到4位后返回
代码实现示例(JavaScript)
function matchTargetNum(inputStr) { // 提取有效数字段 const validNum = inputStr.match(/^0*(\d{1,6})$/)[1]; if (validNum.length >=5 && validNum[0] !== '0') { return validNum; } else { // 补前导零到4位,取末尾4位避免超长 return validNum.padStart(4, '0').slice(-4); } }
测试验证结果(完全匹配你给出的示例)
| 输入字符串 | 输出结果 |
|---|---|
| 10455 | 10455 |
| 006995 | 6995 |
| 002085 | 2085 |
| 00000001 | 0001 |
| 0001 | 0001 |
| 106 | 0106 |
| 8181 | 8181 |
| 0093355 | 93355 |
| 8 | 0008 |
| 649402 | 649402 |
| 01 | 0001 |
| 02 | 0002 |
| 000000001 | 0001 |
| 0815 | 0815 |
内容的提问来源于stack exchange,提问作者Riceman
相关产品推荐
相关产品推荐

