从后面将字符串拆分为数组

Wha*_*ber 0 javascript arrays string numbers

我有一个字符串.

var string = "31415926535897932384626433832795028841971693993751058209749445923078164";
Run Code Online (Sandbox Code Playgroud)

我想把它从后面分成长度为10的数组.

我有:

function split(a) {
  return a.split( /(?=(?:..........)*$)/ ).map(function(x){return parseInt(x)});
}
Run Code Online (Sandbox Code Playgroud)

这给了我想要的输出:

[3, 1415926535, 8979323846, 2643383279, 5028841971, 6939937510, 5820974944, 5923078164]
Run Code Online (Sandbox Code Playgroud)

问题:

  • 如何将上述函数设置为动态,以便将字符串分解为n个字符?(目前我正在添加/删除点)

  • 拆分时如何跳过第一个字符?(我希望第一个元素总是3,所以第二个元素的长度可以是1到n)?

Avi*_*Raj 6

只需指定花括号内每个项目要获得的位数.请注意,您无法将变量传递给使用/分隔符的正则表达式.你必须使用RegExp构造函数来传递regex中的变量.

var string = "31415926535897932384626433832795028841971693993751058209749445923078164";
function split(a,n) {
  return a.split( new RegExp("(?=(?:.{" + n + "})*$)" )).map(function(x){return parseInt(x)});
}
alert(split(string, 10))
Run Code Online (Sandbox Code Playgroud)

要么

您可以简单地使用匹配而不是拆分.

string.match(/(?!^.).{11}/gm)
Run Code Online (Sandbox Code Playgroud)

DEMO

var string = "31415926535897932384626433832795028841971693993751058209749445923078164";
function split(a,n) {
  return a.match(new RegExp("(?!^.).{" + n + "}|^.", "gm")).map(function(x){return parseInt(x)});
}
alert(split(string, 11))
Run Code Online (Sandbox Code Playgroud)

如果你还想匹配剩余的字符,即开头存在的字符和最后存在的不匹配的字符,你可以使用这个正则表达式.

/(?!^.).{11}|^.|.+/gm
Run Code Online (Sandbox Code Playgroud)

DEMO