将字符串分割成一个交替包含一位和两位数字的数组

3

能否使用正则表达式将字符串拆分,使每隔一个数字成对出现(从右侧开始)?

//             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]

我尝试将字符串反转,然后添加交替两个和一个字符的块,直到字符串的末尾(前面)。然后再次反转它。这主要起作用,但是有缺陷(不能适用于所有情况)。我还尝试了正则表达式。

(\d\d)(\d)(\d\d)(\d)(\d\d)(\d)

但是这也不起作用(具有讽刺意味的是只在正则表达式测试器中) - 它太长了,但我需要它适用于最多10位数字。


什么是编程语言? - Jose Carlos Ramos Carmenates
是的,这是可能的。现在请阅读 [ask]。 - Amit
在这种情况下:// 1234 [1,2,34] 可能是这个 // 1234 [12,34] 吗? - Jose Carlos Ramos Carmenates
我正在将数字转换为单词。一千,两百,三十四。 - Ghoul Fool
有趣的问题,你尝试过什么? - AGE
2个回答

3

不难:

从右侧开始,第一次取2个数字,第二次取1个数字。使用slice。然后使用unshift将其推入数组的开头。

我使用一个标志来知道何时只取一个参数,何时取两个参数(成对标志)。

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"]

#Amina,你的解决方案更优雅、更快——但我已下定决心要到那里! - Ghoul Fool

1

最终我到达了那里。

//             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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接