我有一个字符串。
var string = "31415926535897932384626433832795028841971693993751058209749445923078164";
我想将其从后面分成长度为10的数组。
我有:
function split(a) {
return a.split( /(?=(?:..........)*$)/ ).map(function(x){return parseInt(x)});
}
这给了我想要的输出为:
[3, 1415926535, 8979323846, 2643383279, 5028841971, 6939937510, 5820974944, 5923078164]
问题:
如何使上面的函数动态化,以便可以将字符串分解为n个字符? (当前我正在添加/删除点)
拆分时如何跳过第一个字符? (我希望第一个元素始终为3,因此第二个元素的长度可以为1到n)?
最佳答案
只需为大括号内的每个项目指定要获取的位数。并请注意,您不能将变量传递给使用/
作为分隔符的正则表达式。您必须使用RegExp
构造函数在正则表达式中传递变量。
var string = "31415926535897932384626433832795028841971693993751058209749445923078164";
function split(a,n) {
return a.split( new RegExp("(?=(?:.{" + n + "})*$)" )).map(function(x){return parseInt(x)});
}
alert(split(string, 10))
要么
您可以简单地使用match而不是split。
string.match(/(?!^.).{11}/gm)
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))
如果您还想匹配其余字符,即开始时存在的字符和最后一个不匹配的字符,则可以使用此正则表达式。
/(?!^.).{11}|^.|.+/gm
DEMO