Разделенная строка Javascript без разделителя - PullRequest
0 голосов
/ 25 марта 2011

По сути, у меня есть строка неизвестных чисел (определяется пользовательским вводом + моя собственная математика), и мне нужно разделить эту строку на 3 части.

Например, у меня может быть "1273498".Мне нужно разделить его на два символа и 3-й и 4-й от ПРАВА, например, так:
127
34
98

Другой пример: 1234567890 должно быть:
123456
78
90

В настоящее время я выполняю это следующим образом:

// get first input box value
var depositgold = document.getElementById('v-gold').value;
// set it to 0 if it's empty
if(depositgold == null || depositgold == '')
    depositgold = 0;

// second input box value
var depositsilver = document.getElementById('v-silver').value;
if(depositsilver == null || depositsilver == '')
    depositsilver = 0;

// third input box value
var depositcopper = document.getElementById('v-copper').value;
if(depositcopper == null || depositcopper == '')
    depositcopper = 0;

// combine the 3 input box values (adding dec to make split easier)
var depositnums = depositgold + '.' + depositsilver + depositcopper;

// do some math on our new value, then split it at out dec
var deposit12 = (0.15 * depositnums).toFixed(4).split(".");
// split the last part of the above split into 4 characters
var result12 = deposit12[1].split("", 3);
// keep the first part of out dec split
var deposit12gold = deposit12[0];
// combine the second part split results into paired numbers
var deposit12silver = result12[0] + result12[1];
var deposit12copper = result12[2] + result12[3];

// repeat the above process
var deposit24 = (0.30 * depositnums).toFixed(4).split(".");
var result24 = deposit24[1].split("", 3);
var deposit24gold = deposit24[0];
var deposit24silver = result24[0] + result24[1];
var deposit24copper = result24[2] + result24[3];

var deposit48 = (0.60 * depositnums).toFixed(4).split(".");
var result48 = deposit48[1].split("", 3);
var deposit48gold = deposit48[0];
var deposit48silver = result48[0] + result48[1];
var deposit48copper = result48[2] + result48[3];

Я знаю, что должен быть намного лучший (и более разумный) способВыполнение вышесказанного - мне нужно сделать это еще несколько раз для этого проекта, и я, конечно, не собираюсь продолжать делать это таким образом.

Я новичок в JS и программировании, так что смейтесь,просто старайся не смеяться слишком сильно;)

Ответы [ 7 ]

5 голосов
/ 25 марта 2011

Попробуйте что-нибудь из следующего:

var str = "123412341";
var matches = str.match(/(.+?)?(.{2})?(.{2})?$/);

// matches[1] = 12341
// matches[2] = 23
// matches[3] = 41

Вы можете изменить RegEx в зависимости от вашего ввода, в настоящее время все группы являются необязательными.

4 голосов
/ 25 марта 2011

Для этого используйте метод substr():

var L = mystring.length
var part1 = mystring.substr(0,L-4);
var part2 = mystring.substr(L-4,2);
var part3 = mystring.substr(L-2,2);
3 голосов
/ 25 марта 2011
('1234'+'56'+'78').match(/(\d*)(\d\d)(\d\d)/)
["12345678", "1234", "56", "78"]
3 голосов
/ 25 марта 2011

Просто используйте метод подстроки

var number = 123456789;
var one = number.substring( 0, number.length - 4 );
var two = number.substring( number.length -4, number.length - 2);
var three = number.substring( number.length - 2 );
1 голос
/ 17 сентября 2012
// Function to parse code in 3 parts
function parse_code_Split (code)
{
    var len = code.length;
    var divisor = (len / 3) >> 0; // get whole number
    console.log(divisor);
    var stringReg = "";
    var regexp = ".{1,"  + divisor + "}";
    try{
        stringReg = new RegExp(regexp,"g");
    }catch(Error){
        window.console.log(Error.message);
    }

    codeSplit = code.match(stringReg);

    // window.console.log(" codeSplit[0] " + codeSplit[0]);
    // window.console.log(" codeSplit[1] " + codeSplit[1]);
    // window.console.log(" codeSplit[2] " + codeSplit[2]);
    // window.console.log(" codeSplit[3] " + codeSplit[3]); // remainder

    return codeSplit;
}
1 голос
/ 25 марта 2011

вот функция, которую я сделал:

/**
 * @param num A number to split like 382203849238
 * @return Returns an array of size 3, where index 0 = 38220384, index 1 = 92, index 2 = 38 based on the example above
*/
function splitNumbers(num) {
    var num = (typeof num == 'string' || typeof num == 'String') ? parseInt(num) : num,
        rem = num % 10000;
    return [Math.floor(num / 10000), Math.floor(rem / 100), rem % 100];    
}
1 голос
/ 25 марта 2011
var number = 1234567890;

number = number.toString();

var a = number.substr(0, number.length - 4),
    b = number.substr(-2),
    c = number.substr(number.length - 4, 2);

console.log(a, b, c);

jsFiddle .

выход

123456 90 78

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...