javascript - 使用正则表达式为最多前两组两个数字添加分隔符
问题描述
我有以下正则表达式,它在这些情况下第一次和第二次出现错误时每两个数字添加一个分隔符:
str.replace(/^(\d{2})(\d{2})/, '$1/$2/')
entered value result expectation
1 ✓
22 x(22) 22/
222 x(222) 22/2
2222 ✓(22/22/)
22222 ✓(22/22/2)
222222 ✓(22/22/22)
...
22222222222 ✓(22/22/2222222)
如何解决这两种错误情况?
解决方案
我不认为仅通过简单的替换就可以做到这一点的好方法。我会使用回调:在第二组中最多匹配 2 个数字,/
如果两个数字都匹配,则只插入第二个:
const change = str => str.replace(
/^(\d{2})(\d{0,2})/,
(_, g1, g2) => `${g1}/${g2 + (g2.length === 2 ? '/' : '')}`
);
console.log(change('2'));
console.log(change('22'));
console.log(change('222'));
console.log(change('2222'));
console.log(change('22222'));
console.log(change('222222'));
或调用.replace
两次:
const change = str => str
.replace(/^\d{4}/, '$&/')
.replace(/^\d{2}/, '$&/');
console.log(change('2'));
console.log(change('22'));
console.log(change('222'));
console.log(change('2222'));
console.log(change('22222'));
console.log(change('222222'));
推荐阅读
- security - 我是否正确理解 Hawk Auth 的原理?
- python - Pandas 有没有办法在 dataframe.apply 中使用先前的行值,其中先前的值也在应用中计算?
- c# - 如何在 Unity 中访问子游戏对象的组件?
- gradle - Kotlin 1.3+ 打破 SLF4J/log4j
- python - 列表中的DataFrame重复字典
- php - 如何使用具有特定时间(小时、分钟)的 whereBetween() 选择数据库的数据?
- android - Android Fragment实现对话框片段监听“空指针异常”
- python - 直接返回修改后的函数参数是 Python 中的一种好习惯吗?
- python - 如何更改轴 SimpleITK::ImageSeriesWriter 使用?
- mysql - 如果我不需要任何数据,SELECT * 是一个好习惯吗?