Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вирезать последни часть, после задаммого символа (https://javascript.ru/forum/misc/26078-virezat-posledni-chast-posle-zadammogo-simvola.html)

dadli 24.02.2012 17:34

вирезать последни часть, после задаммого символа
 
еше раз здравтвуите :)

есть строка, хочется вирезать из него последни часть, после заданного символа.
например есть строка "aaa.www.ddd" задаём символ . (точка) получаем .ddd

как ето реализоваеть ?

Aetae 24.02.2012 17:41

alert(
/\.[^\.]*$/.exec( "aaa.www.ddd" )[0]
)

nikita.mmf 24.02.2012 17:43

var str = 'aaa.www.ddd';
alert( str.slice( str.lastIndexOf('.') + 1 ) );

Mахmaxmaximus 24.02.2012 17:55

nikita.mmf,
четко, наш парень)

dadli 25.02.2012 11:59

спасибо :)

Pavel M. 25.02.2012 15:04

Цитата:

Сообщение от nikita.mmf (Сообщение 159705)
var str = 'aaa.www.ddd';
alert( str.slice( str.lastIndexOf('.') + 1 ) );

в IE < 9 только не работает

Mахmaxmaximus 25.02.2012 15:08

Pavel M.,
кстати я уже под <9 не верстаю)

Rootpassword 25.02.2012 15:11

Цитата:

Сообщение от Mахmaxmaximus
кстати я уже под <9 не верстаю)

winXP пользователи шлют лучи добра.

Pavel M. 25.02.2012 15:15

Цитата:

Сообщение от Mахmaxmaximus (Сообщение 159837)
Pavel M.,
кстати я уже под <9 не верстаю)

это личное дело каждого, что поддерживать - просто желательно упоминать об этом в форуме, когда приводишь примеры кода

nikita.mmf 25.02.2012 16:15

Pavel M.,
совсем забыл, что это не работает в IE < 9.
var lastIndexOf =	String.prototype.lastIndexOf ?
					function ( str, searchstring ) {
						return str == null ? null : String.prototype.lastIndexOf.call( str, searchstring );
					} :
					function ( str, searchstring ) {
						if ( str == null ) return null;
						str = str + "";
						var strLength = str.length;
						var indexOf = str.split('').reverse().join('').indexOf( searchstring );
						return indexOf > -1 ? strLength - indexOf - 1 : -1;
					}
var foo = "aaa.ddd.bar";
alert( foo.slice( lastIndexOf( foo, '.' ) + 1 ) );

Mахmaxmaximus 25.02.2012 23:04

nikita.mmf,
что мешало просто в прототип добавить? О_О
что вообще за адов метод7 с чего ты взял что в ишаке реверс есть? О_О зачем вообще реверс делать? О_О что за ад тут происходит блять?

Aetae 25.02.2012 23:36

Одно слово - наркоманы.
lastIndexOf у строк поддерживается с самой первой версии js.

Mахmaxmaximus 25.02.2012 23:39

Цитата:

Сообщение от Aetae
lastIndexOf у строк поддерживается с самой первой версии js.

млять я уж думал рони то тупить не будет , сам еще удивился О_О,выходит рони ни задрот совсем, как я думал.

Mахmaxmaximus 25.02.2012 23:44

//ласт индекс оф
String.prototype.lastIndexOf = function(subString, index){
	subString.length > 1 && (subString = subString.split(''));
	var i = (index !== undefined) ? index : this.length-1;
	while(i-- != 0){
		if(this[i] === subString[0]){
			if(subString.length === 1) return i;
			else{
				for( var j = 1; j < subString.length; j++){
				    if(this[i+j] !== subString[j]) break;
					if(j === subString.length-1)   return i;
				};
			}
		};
	}
	return -1;
};

alert("canal".lastIndexOf("a"))   // 3
alert("canal".lastIndexOf("a",2)) // 1
alert("canal".lastIndexOf("a",0)) // -1
alert("canal".lastIndexOf("x"))   // -1

Aetae 26.02.2012 00:18

Заменить кроссбраузерный метод на некросбраузерный...

Mахmaxmaximus 26.02.2012 04:11

Aetae,
о чем ты вообще? кто так делает?

если ты про мой метод, то он кросс.

poorking 26.02.2012 05:00

Mахmaxmaximus,
indexOf/lastIndexOf появился в Array.prototype с версии javascript 1.6, но у String он с 1.0, зачем его заменять на свой?

Mахmaxmaximus 26.02.2012 05:18

poorking,
его и не нужно заменять это полнейшая глупость. очевидно что нативный быстрее.
а зачем его нужно заменять? если ни секрет конечно

Mахmaxmaximus 26.02.2012 05:21

аа, тебя вот это смутило?
String.prototype.lastIndexOf


просо чувак сказал что в ослах такого нет и привел пример как реализовать,я показал как надо это делать.

Aetae 26.02.2012 06:09

subString[0]

Это не будет работать в ie.

Pavel M. 26.02.2012 09:30

Цитата:

Сообщение от Pavel M. (Сообщение 159836)
в IE < 9 только не работает

прошу прощения, ошибся,
засело в голове, что lastIndexOf для массивов не работает в старых IE, а здесь шла речь о строках

nikita.mmf 26.02.2012 14:08

Mахmaxmaximus,
если конструктивная критика по коду, то напишите, если нет - то лучше вообще ничего не писать.

Mахmaxmaximus 26.02.2012 14:22

nikita.mmf,
не производителен, избыточен. ты используешь 2 реверса, 2 конкатенации и.т.п. это все пробегается по всему массиву целиком, а нам не нужен весь массив целиком. Это избыточно и не логично.

Цитата:

Сообщение от Aetae (Сообщение 159923)
subString[0]

Это не будет работать в ie.

//ласт индекс оф
String.prototype.lastIndexOf = function(subString, index){
	subString.length > 1 && (subString = subString.split(''));
	var i = (index !== undefined) ? index : this.length-1;
	while(i-- != 0){
		if(this[i] === subString[0]){
			if(subString.length === 1) return i;
			else{
				for( var j = 1; j < subString.length; j++){
				    if(this[i+j] !== subString[j]) break;
					if(j === subString.length-1)   return i;
				};
			}
		};
	}
	return -1;
};

alert("canal".lastIndexOf("a"))   // 3
alert("canal".lastIndexOf("a",2)) // 1
alert("canal".lastIndexOf("a",0)) // -1
alert("canal".lastIndexOf("x"))   // -1

Aetae 26.02.2012 15:28

Горе мне, split то я и не заметил.
Это тема полна фэйлами чуть более чем полностью.=/

monolithed 26.02.2012 15:34

На вскидку еще несколько вариантов без регексов:
var str = "aaa.www.ddd";
alert(str.substr(str.lastIndexOf('.') + 1));

var array = "aaa.www.ddd".split('.');
alert(array[array.length-1]);

alert("aaa.www.ddd".split('.').slice(-1));

alert("aaa.www.ddd".split('.').pop(-1));

alert("aaa.www.ddd".split('.').splice(-1, 1));

Mахmaxmaximus 26.02.2012 15:36

monolithed,
ну так не честно)

monolithed 26.02.2012 15:37

Цитата:

Сообщение от Mахmaxmaximus
ну так не честно)

По моему TC не просил вариант через жопу ;)

Mахmaxmaximus 26.02.2012 15:47

По моему ни чего производительней ластИндексОф тут нет, а сплит медленнее регулярок, или я не прав?

Цитата:

Сообщение от monolithed
По моему TC не просил вариант через жопу

не понял ты про что вообще? предложили же варианты не через жопу.

monolithed 26.02.2012 15:58

Цитата:

Сообщение от Mахmaxmaximus
По моему ни чего производительней ластИндексОф тут нет

Это нужно проверять.
Цитата:

Сообщение от Mахmaxmaximus
сплит медленнее регулярок, или я не прав?

По идее не должен, т.к. сплит выполняется за полиноминальное время, и имеет более низкий асимптотический коэффициент чем регексы.

nikita.mmf 26.02.2012 16:03

Mахmaxmaximus,
тесты по производительности в студию, 1 reverse и 1 join.

monolithed 26.02.2012 16:17

Еще один алгоритм:
var str = "aaa.www.ddd",
    i = str.length,
    array = [];

while (str[--i] != '.')
    array.push(str[i]);

alert(array.join(''));


И для совсем извращенцев на 1-2mc медленнее:
var str = "aaa.www.ddd",
    i = str.length, path;

while (str[--i] != '.')
    path = str.slice(i);

alert(path);

Mахmaxmaximus 26.02.2012 16:24

monolithed,
он в ие не работает

monolithed 26.02.2012 16:34

Цитата:

Сообщение от Mахmaxmaximus
он в ие не работает

ага ниже 8-го не пашет

Mахmaxmaximus 26.02.2012 16:40

я вообще не понимаю, если браузеры не работают это их проблемы) но ни как не мои ;)

я не знаю на сколько нужно мало зарабатывать чтобы прогимбатьяс и программировать не на javascript, а на каком то неведомом извращенском языке в котором ни чего нет)
я рельно знаю только жс, иешные языки я не учил, а так брал бы как минимум двойную плату за двойную работу. одна на яваскрипт, другая на ИеСкрипт.


Часовой пояс GMT +3, время: 11:46.