1 (изменено: Rumata, 2013-07-24 21:06:07)

Тема: JS: Разрезание строк на фрагменты заданной длины

Нашел в своих закромах код, который решает задачу разрезания строк на фрагменты заданной длины.

Краткое описание:

String#splitLeft(n)
Разрезать строку на фрагменты длиной n, начиная сначала исходной строки. Результатом является массив строк длиной не более n символов.

String#splitRight(n)
Разрезать строку на фрагменты длиной n, начиная с конца исходной строки. Результатом является массив строк длиной не более n символов.

Исходный код:


(function()
{
    function L(n)
    {
        return L[n] = L[n] || new RegExp('.{' + n + '}|.+', 'g');
    };

    function R(n)
    {
        return R[n] = R[n] || new RegExp('(?=(?:.{' + n + '})+$)');
    };

    function split(string, n, method, re)
    {
        n = Math.abs(Number(n) || 0);

        if ( n <= 0 ) {
            return [];
        }

        if ( n == 1 ) {
            return string.split('');
        }

        return string[method](re);
    };

    String.prototype.splitLeft = function(n)
    {
        var re = L(n);
//        return split(this, n, 'match', re);
        return [].concat(split(this, n, 'match', re));
    };

    String.prototype.splitRight = function(n)
    {
        var re = R(n);
        return split(this, n, 'split', re);
    };

})();

Пример использования:


function demo(n, s)
{
    var sl = s.splitLeft(n);
    var sr = s.splitRight(n);

    alert([
        'Width  : ' + n, 
        'Origin : ' + s, 
        'Left   : ' + sl, 
        'Right  : ' + sr, 
    ].join('\n'));
};

var s = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

demo(16, s);
demo(10, s);
( 2 * b ) || ! ( 2 * b )

2 (изменено: max7, 2013-07-25 00:49:09)

Re: JS: Разрезание строк на фрагменты заданной длины

А я вот такую штуку давно сделал

String.prototype.split_len = function(len)
{
   if(!len || !this.length)
      return [""];
      
   if(len == 1)
      return this.split("");
            
   var out = [];
      
   if(this.length > len)
   {
      for(var i = 0, ii = ((this.length/len)|0)*len; i < ii; i += len)
         out.push(this.substr(i,len));
               
      if(this.length%len > 0)  
         out.push(str.substr(this.length - (this.length%len))); 
   }
   else
   {
      out.push(this);
   }
            
   return out;
};

3

Re: JS: Разрезание строк на фрагменты заданной длины

Вот еще одна очень древняя штука. Уже сам не помню как работает. Результат ее работы такой же как и у splitLeft:


String.prototype.splitSize = function(size)
{
    var N = Math.abs(Number(size) || 0);

    if ( N == 0 ) {
        return [];
    }

    var n = Math.ceil(this.length / N);
    var result = new Array(n);
    var j = 0;

    var r = 0;
    if ( size < 0 ) {
        r = this.length % N;
        if ( r ) {
            result[j] = this.slice(0, r);
            j++;
        }
    }

    for (var i = r; i < this.length; j++, i += N) {
        result[j] = this.slice(i, i + N);
    }
    return result;
};
( 2 * b ) || ! ( 2 * b )

4

Re: JS: Разрезание строк на фрагменты заданной длины

Эй, а как же самое банальное

String.prototype.split_len_v2 = function(len) 
{ 
   return this.match(new RegExp(".{" + (len|0).toString(10) + "}|.+", "g")); 
};

5

Re: JS: Разрезание строк на фрагменты заданной длины

max7 пишет:

Эй, а как же самое банальное

Если удалить весь синтаксический сахар вокруг методов splitLeft и splitRight получится "банальное"

( 2 * b ) || ! ( 2 * b )