2016-02-03 2 views
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-значные номера макс.

+0

Какой язык? –

+0

Да. Возможно. Теперь, пожалуйста, прочитайте [ask]. – Amit

+0

В этом случае: '// 1234 [1,2,34]' возможно это '// 1234 [12,34]'? –

ответ

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

#Amina Ваше решение более элегантное и быстрое - но я был настроен добраться туда! –

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 
Смежные вопросы