是否可以拆分一个字符串(可能带有正则表达式(,以便每隔一个数字都是一对(从右端开始(?
// 1 [1]
// 12 [12]
// 123 [1,23]
// 1234 [1,2,34]
// 12345 [12,3,45]
// 123456 [1,23,4,56]
// 1234567 [1,2,34,5,67]
// 12345678 [12,3,45,6,78]
// 123456789 [1,23,4,56,7,89]
// 1234567890 [1,2,34,5,67,8,90]
我尝试反转字符串,然后添加交替的两个和一个字符块,直到字符串的末尾(前面(。然后再次反转。这主要有效,但它有缺陷(并非适用于所有情况(。我也尝试了正则表达式
(dd)(d)(dd)(d)(dd)(d)
但这也不起作用(具有讽刺意味的是,仅在正则表达式测试器中( - 它太长了,但我需要它最多适用于 10 位数字。
没那么难:
从右边开始,我将取一次 2 位数字,第二次取 1 位数字。使用 slice
.然后我将使用 unshift
在数组的开头推送它。
我正在使用一个标志,知道何时只采用 1 个参数,何时采用两个参数(配对标志(
m(1)
m(12)
m(123)
m(1234)
m(12345)
m(123456)
m(12345678)
m(123456789)
m(1234567890)
function m(x){
x=x.toString()
var a=[]
var v;
var y=2
while(x){
v=x.slice(-y)
x=x.slice(0,-y)
y=y==1? 2:1
a.unshift(v)
}
console.log(a)
}
结果:
["1"]
["12"]
["1", "23"]
["1", "2", "34"]
["12", "3", "45"]
["1", "23", "4", "56"]
["12", "3", "45", "6", "78"]
["1", "23", "4", "56", "7", "89"]
["1", "2", "34", "5", "67", "8", "90"]
我最终到达了那里。
// 1 [1]
// 12 [12]
// 123 [1,23]
// 1234 [1,2,34]
// 12345 [12,3,45]
// 123456 [1,23,4,56]
// 1234567 [1,2,34,5,67]
// 12345678 [12,3,45,6,78]
// 123456789 [1,23,4,56,7,89]
// 1234567890 [1,2,34,5,67,8,90]
var results = "";
pairUp(1)
pairUp(12)
pairUp(123)
pairUp(1234)
pairUp(12345)
pairUp(123456)
pairUp(12345678)
pairUp(123456789)
pairUp(1234567890)
alert(results);
function pairUp(num)
{
var s = num.toString();
s = s.split("").reverse().join("");
var a = s.split("");
var r = []; // our results array
count = 0;
for (var i = 0; i <= a.length -1; i++)
{
temp = a[count];
if ((i % 2) == 0) // even (0, 2, 4)
{
var p = a[count+1];
var q = a[count];
if (p == undefined) p = "";
if (q) r.push(p + q+ "");
count+=2;
}
else
{
if (temp != undefined) r.push(temp + "");
count+=1;
}
} // end loop
r = r.reverse();
results+= r + "n";
} // end pair up