我想问一个关于正则表达式的问题。

我有一组IBAN。

例如["DE46700202700663820656", "DE07860700240455474700"]

我想在每个4个字符之间添加空格。

例如"DE46 7002 0270 0663 8206 56"

目前,我使用此正则表达式。

String(this.props.invoiceData.iban).replace(/(.{4})/g, '$1 ').split(',')

它可以添加空格,但是对于第二个IBAN,正则表达式不会重新启动,并且第二个IBAN被销毁。

例如["DE46 7002 0270 0663 8206 56", "D E078 6070 0240 4554 7470 0"]

如何显示两个具有适当空格的IBAN,如下所示?

例如["DE46 7002 0270 0663 8206 56", "DE07 8607 0024 0455 4747 00"]

最佳答案

它可以添加空格,但是对于第二个IBAN,正则表达式不会重新启动,并且第二个IBAN被销毁。


这是因为正则表达式保持状态。要么:


每次创建它,或者
在使用lastIndex之前将其设置为0


这是#1:



var ibans = ["DE46700202700663820656", "DE07860700240455474700"];
ibans = ibans.map(function(iban) {
  return iban.replace(/(.{4})/g, '$1 ');
});
console.log(ibans);





除非您使用的是古老的JavaScript引擎,而这个引擎的问题是每次都不重新创建文字正则表达式(我们说的是Firefox 3.0x或更高版本),否则应该没问题。

这里是#2:



var rex = /(.{4})/g;
var ibans = ["DE46700202700663820656", "DE07860700240455474700"];
ibans = ibans.map(function(iban) {
  rex.lastIndex = 0;
  return iban.replace(rex, '$1 ');
});
console.log(ibans);





显然,如果可以使用ES2015 +箭头功能,则两者都可以缩短。

关于javascript - 如何正确为IBAN数组添加空格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48020882/

10-13 01:30