Текст после последней точки
Тут скорее всего прийдется делать регулярками. Короч вот в чем дело: скрипту дается ссылка на файл, а он должен вернуть его расширение. Например:
image.jpg - вернет jpg file:///d:/word.doc - вернет doc jquery.min.js - вернет js |
var url = 'file:///d:/word.doc'.split('.');
alert(url[url.length-1]);
|
Safort,
Только если точек больше чем одна... неожиданно получишь иной результат. ) |
devote,
точно?)
var url = 'file:///d:/w.o.r.d.doc'.split('.');
alert(url[url.length-1]);
|
Цитата:
Ну хорошо, а если вообще точек не будет? |
devote,
Цитата:
|
Safort, твой пример можно упростить
var ext = 'file:///d:/w.o.r.d.doc'.split('.').pop();
alert(ext);
Ну а так если все же нужен правильный функционал:
var url = 'file:///d:/w.o.r.d.doc';
var ext = (ext = url.split('.')).length > 1 ? ext.pop() : '';
alert(ext);
var url = 'file:///d:/doc';
var ext = (ext = url.split('.')).length > 1 ? ext.pop() : '';
alert(ext);
|
Цитата:
url.match(/\.([a-z]+)$/i)[1] |
devote,
за pop() спасибо, совсем забыл про него) |
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Конечно для мелких сайтиков эта оптимизация не значительна, и не особо требуется. Но все же нужно уметь и знать как обходится без регулярных выражений. И при возможности их не использовать. |
devote,
К тому же, во первых, по поводу перфоманса еще можно поспорить. Во вторых, код с регулярками тоже может быть оптимизирован
var url = 'file:///d:/w.o.r.d.doc';
i=1000000
console.time('my stupid')
while(i--){
url.match(/\.([a-z]+)$/i)[1]
}
console.timeEnd('my stupid')
i=1000000
re=/\.([a-z]+)$/i
console.time('my better')
while(i--){
url.match(re)[1]
}
console.timeEnd('my better')
i=1000000
console.time('yours')
while(i--){
var ext = (ext = url.split('.')).length > 1 ? ext.pop() : '';
}
console.timeEnd('yours')
//в ноде:
// my stupid: 423ms
// my better: 401ms
// yours: 425ms
В третих, во большинстве случаев можно обойтись тестом, а матчить только в поседнюю очередь. А так по любому будет быстрей. Цитата:
Цитата:
|
devote,
Цитата:
|
вот никогда бы не додумался делать split'ом
|
TimohaP,
постоянно так делаю, чтобы регулярки не писать :D |
TimohaP,
Ага, выручает в примитивных случаях, типа вашего, или, например,
alert("1111/2222/3333/4444".split("/").reverse().join("/"))
Но шаг вправо -- наг влево,
alert("1111222233334444".replace(/(1+)(2+)(3+)(4+)/, "$4$3$2$1"))
и уже облом. и даже вот это 1111/2222/3333/4444/ вы за*тесь реверсить сплитом Так что особо не расчитывайте на него, в плане работы с текстом. Хотя в js split -- мощная, и юзабельная конструкция, она много че может, это да. |
devote,
var url = "file:///d:/w.o.r.d.doc";
console.time("time1");
var ext1 = url.split('.').pop();
console.log(ext1);
console.timeEnd("time1");
console.time("time2");
var ext2 = url.slice(url.lastIndexOf(".") + 1);
console.log(ext2);
console.timeEnd("time2");
Цитата:
var url = "file:///d:/w.o.r.d.doc";
console.time("time2");
var ext2 = url.slice(url.lastIndexOf(".") + 1);
console.log(ext2);
console.timeEnd("time2");
console.time("time1");
var ext1 = url.split('.').pop();
console.log(ext1);
console.timeEnd("time1");
Цитата:
в ff34 всегда разница в 0.01-0.02 ms |
Цитата:
var url = "file:///d:/w.o.r.d.doc";
alert((ext = url.lastIndexOf('.')) !== -1 ? url.substr(ext + 1) : '');
bes, уже предложил его выше)
var url = "file:///d:/w.o.r.d.doc";
i=1000000
re=/\.([a-z]+)$/i
console.time('my better')
while(i--){
var ext = url.match(re)[1]
}
console.log(ext);
console.timeEnd('my better')
i=1000000
console.time('yours')
while(i--){
var ext = (ext = url.lastIndexOf('.')) !== -1 ? url.substr(ext + 1) : ''
}
console.log(ext);
console.timeEnd('yours')
|
Цитата:
Парсинг текста без регулярок может стать хорошим интеллектуальным упражнением, (правда, тут больше подходит не сахар языка, а что нибудь более суровое, например, обработка и перебор списков), но практического значения это не имеет. |
Цитата:
Цитата:
|
Цитата:
Цитата:
ЗЫ кроме того, скорость работы приложения, в целом, зависит не столько от мелких оптимизаций, сколько от хорошо продуманной архитектуры. |
krutoy,
Цитата:
Об архитектуре думай, но и о производительности не забывай. |
Цитата:
|
krutoy,
.. в день релиза) |
Цитата:
Сейчас все больше говорят о неосиляторстве ООП в JS, об этом чаще всего я слышу. А причина тому проста: основная масса ноющих -- выходцы из статичных быдлоязыков типа жабы. |
krutoy,
Что - что, а Java ну никак не быдлоязык) php так иногда называют, но java там и рядом не валялась |
tsigel,
это всего лишь твое мнение. |
Цитата:
![]() |
|
Цитата:
в том что медленно летает при первых запусках, так уже сейчас не так и медленно и с каждым запуском всё быстрее про ide вообще чушь, пиши в блокноте и компилируй из командной оболочки, если так больше нравится про быдловость самого языка лучше растолкуй, или ты хотел указывать тип в статически типизируемом языке и не писать дополнительных символов при этом что ли :D |
| Часовой пояс GMT +3, время: 08:41. |