首页 > 解决方案 > 使用正则表达式为最多前两组两个数字添加分隔符

问题描述

我有以下正则表达式,它在这些情况下第一次和第二次出现错误时每两个数字添加一个分隔符:

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)

如何解决这两种错误情况?

标签: javascriptregex

解决方案


我不认为仅通过简单的替换就可以做到这一点的好方法。我会使用回调:在第二组中最多匹配 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'));


推荐阅读