0

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

我有一组 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"]

4

2 回答 2

2

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

那是因为正则表达式保持状态。任何一个:

  1. 每次都创建它,或者

  2. 使用前设置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+ 箭头函数等,两者都可以缩短......

于 2017-12-29T10:16:07.090 回答
1

你可以尝试这样使用.map()

var a = ["DE46700202700663820656", "DE07860700240455474700"];
var b = a.map(i => i.replace(/(.{4})/g, '$1 '));
console.log(b)

于 2017-12-29T10:14:54.147 回答