Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Коррекция метода String.prototype.split (Rumata)
Author Message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Mon Feb 21, 2005 9:12 am (написано за 5 минут 2 секунды)
   Post subject: Коррекция метода String.prototype.split
Reply with quote

msdn.microsoft.com/library/default.asp?url=/library/en-us/jscript7/html/jsmthsplit.asp
wdh.suncloud.ru/js09.htm#hsplit

из приведенных ссылок совсем не очевидно, какова будет результирующая строка в таком примере
Code (JavaScript): скопировать код в буфер обмена
var str = "a b c d e f";
var arr = str.split(" ", 3);

//
//
 
подкорректировал ситуацию следующим "патчем"
Code (JavaScript): скопировать код в буфер обмена
String.prototype.__split__ = String.prototype.split;
String.prototype.split = function(r, n)
{
    var result = this.__split__(r, n);
    if (n > 0) {
        var x = result.join((r.constructor == RegExp) ? r.source : r);
        var y = this.match(new RegExp(x));
        result[result.length - 1] += this.substr(y[0].length);
    }
    return result;
}
есть ли мысли, идеи о корректности такого алгоритма?
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Mon Feb 21, 2005 6:47 pm (спустя 9 часов 35 минут; написано за 1 минуту 37 секунд)
   Post subject:
Reply with quote

Кривовато будет... а если в result встретится *?
Лучше бы сделать re вида '^((.*?)'+r+'){n}' и применить его к строке.
Back to top
View user's profile Send private message Send e-mail
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Mon Feb 21, 2005 8:15 pm (спустя 1 час 28 минут; написано за 22 секунды)
   Post subject:
Reply with quote

мда... или экранировать все спецсимволы
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 411
   поощрить/наказать


PostPosted: Mon Feb 21, 2005 8:22 pm (спустя 6 минут; написано за 33 секунды)
   Post subject:
Reply with quote

А чем мое предложение не нравится? Оно, по идее, и работать должно быстрее - нет join-а лишнего.
Back to top
View user's profile Send private message Send e-mail
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Tue Mar 01, 2005 2:04 am (спустя 7 дней 5 часов 42 минуты; написано за 15 секунд)
   Post subject:
Reply with quote

Code (JavaScript): скопировать код в буфер обмена
String.prototype.__split__ = String.prototype.split;
String.prototype.split = function(delim, limit)
{
    if (limit && limit > 0) {
        var isRegExp = delim && delim.constructor == RegExp;
        if (isRegExp) {
            var res = delim.source;
            var ref = "";
            if (delim.ignoreCase) ref += "i";
            if (delim.multiline) ref += "m";
//            if (delim.global) ref += "g";
        } else {
            var res = delim;
            var ref = "";
        }
        var x = this.match(new RegExp("^((?:.*?" + res + "){" + (limit - 1) + "})(.*)", ref));
        if (x) {
            var result = x[1].__split__(delim, limit);
            var n = result.length;
            if (!isRegExp && n) n--;
            result[n] = x[2];
            return result;
        }
        return this.valueOf();
    }
    return this.__split__(delim, limit);
}
ранее предложенный (в первом посте) "патч" работоспособен, но идея Дмитрия понравилась и на свет появилась другая версия. возможность багов не исключаю, хотя критические моменты пытался обойти
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML