【问题标题】:Split string into array with alternate one & two digits将字符串拆分为具有交替一位和两位数字的数组
【发布时间】:2016-02-03 20:52:40
【问题描述】:

是否可以拆分一个字符串(可能使用正则表达式),以便每隔一个数字是一对(从右手端开始)?

//             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 位数字。

【问题讨论】:

  • 语言是什么?
  • 是的。这是可能的。现在请阅读How to Ask
  • 在这种情况下:// 1234 [1,2,34] 也许是// 1234 [12,34] ?
  • 我将数字分解为单词。一千、二百、三十四。
  • 有趣的问题,what have you tried?

标签: javascript arrays string split


【解决方案1】:

没那么难:

从右边开始,我一次取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"]

【讨论】:

  • #Amina 您的解决方案更优雅、更快捷——但我决心实现目标!
【解决方案2】:

我终于到了。

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

【讨论】:

    猜你喜欢
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多