Извлечь из ссылки число
Всем привет!
Помогите правильно извлечь число (выделено жирным) из ссылки: http://site.ru/load/38-1-0-138 Дело в том, что можно было бы использовать рег. выражения. но в данном случае числа перед 138 могут быть любой длинны. Как я понял, нужно как то записать в поиске, что происходит считывание числа после определенного "-". Получается, но только наоборот. То есть вырезается 138, а остальное остается. Нужно сделать, что бы вырезалось все, кроме 138 var sa = 'http://site.ru/load/38-1-0-138'; sa.slice(0, -3); |
function lastNumber(_url, _word){
_word?_word=_word:_word = '-'
var start
for(var i=_url.length-1; i >= 0; i--){
if(_url[i] == _word){
start = i
break
}
}
return parseInt(_url.slice(start+1),10)
}
принимает ссылку, возвращает число после последнего знака " - " вторым аргументом можно передавать символ после последнего которого брать число, если не передать, то по умолчанию этот символ равен знаку минус)) |
\как понял
var x = "http://site.ru/load/38-1-0-138".split("-").pop();
alert(x);
|
Цитата:
|
Спасибо Вам большое))
|
Livanderiaamarum,
Ой, ну да ладно. А зачем то так было мудрить :) _word?_word=_word:_word = '-' Вот вам 2 варианта, куда попроще: var word = arguments[1] || '-'; word = word || '-' А вместо последней вашей кучи кода, нельзя было сделать так что ле:
var str = 'http://site.ru/load/38-1-0-138';
alert(str.slice(++str.lastIndexOf('-')));
И вообще, по хорошему одна регулярка решает все проблемы и там уже вытаскивай какой хочешь индекс :) |
Цитата:
я даже щас подумал сделать какой нить такой метод))) спасибо что напомнили) |
Nekromancer, в фф ошибка, ибо инкремент не к переменной, а к числу)
Так:
str="http://site.ru/load/38-1-0-138";
alert(str.slice(str.lastIndexOf("-")+1));
|
trikadin,
Ты прав, да. Я с начала запустил с обычным сложением а потом поменял на инкремент. Что то я совсем упустил, что он не возвращает значение, а изменяет исходное :) Попытка излишней оптимизации. |
Вариант...
var sa = 'http://site.ru/load/38-1-0-138'; alert(sa.match(/\d+$/)) |
Цитата:
p.s.: IE неадекватен. Разница с FF во времени исполнения ппц.
/**********************************************************/
var timer = (new Date()).getTime();
for(var i = 0; i < 100000; i++) {
var x = "http://site.ru/load/38-1-0-138".split("-").pop();
}
alert((new Date()).getTime() - timer); // IE - 1109, FF - 75
/**********************************************************/
var timer = (new Date()).getTime();
for(var i = 0; i < 100000; i++) {
var x = "http://site.ru/load/38-1-0-138";
x = x.substring(x.lastIndexOf("-") + 1);
}
alert((new Date()).getTime() - timer); // IE - 375, FF - 11
/**********************************************************/
function lastNumber() {
var _url = "http://site.ru/load/38-1-0-138";
var _word = "-";
var start;
for(var i=_url.length-1; i >= 0; i--){
if(_url.charAt(i) == _word){
start = i;
break;
}
}
return _word = _url.slice(start+1);
}
//.........
var timer = (new Date()).getTime();
for(var i = 0; i < 100000; i++) {
lastNumber();
}
alert((new Date()).getTime() - timer); // IE - 1281, FF - 20
/**********************************************************/
var timer = (new Date()).getTime();
for(var i = 0; i < 100000; i++) {
var sa = 'http://site.ru/load/38-1-0-138'.match(/\d+$/)[0];
}
alert((new Date()).getTime() - timer); // IE - 1219, FF - 249
|
128
25 33 522 Linux. |
57
14 65 203 Linux) |
С чего Вы взяли? Встроенные функции работают достаточно быстро, и хоть первый раз мой алгоритм был не вполне адекватен, он быстрее Вашего, по крайней мере в IE) Но в FF медленнее ^_^
function lastNumber(_url, _word){
_word?_word=_word:_word = '-'
var start //индекс вхождения
for(var i=_url.length-1; i >= 0; i--){
if(_url[i] == _word){
start = i
break
}
}
return parseInt(_url.slice(start+1),10)
}
function qq(){
var start = new Date().getTime();
for(var i=0; i < 100000; i++){
//lastNumber("http://site.ru/load/38-1-0-138")
//parseInt("http://site.ru/load/38-1-0-138".split("-").pop(),10)
}
log(new Date().getTime() - start)
}
qq()
раскомментируйте по очереди строчки, мою и вашу) в моей 50 , в вашей 150 ;) |
trikadin,
У меня нетбук ;) |
Цитата:
|
Цитата:
|
bullshit
лучший вариант, по-моему мнению, от nerv_ (ф-я) Livanderiaamarum, для тестировнаия скоростей есть замечательный сайт http://jsperf.com. предлагаю его обкатать :) |
пи**ками еще померьтесь
|
Цитата:
|
devote,
Никто ничем не здесь не меряются. Здесь вполне адекватно проверяют тот или иной способ одной задачи на производительность. Может конечно слегка примитивно, но это ничего не меняет. |
Цитата:
|
О, тю, давайте писать для каждого браузера свой JS код. А чё, в детстве мало с ИЕ наигрались?)
|
Цитата:
|
Цитата:
|
Livanderiaamarum,
Нужно отталкиваться от ситуации. Нужна скорость - lastIndexOf. Нужна расширяемость - регулярки. Нужно простота - split/pop. |
Цитата:
Так что... ;) |
trikadin,
Да в курсе, все уши уже им прожужжали. Я конечно за развитие и всё такое, но меня ES6 больше прельщает, чем Dart. |
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 15:36. |