JavaScript, как наиболее эффективным способом получить второе значение из строки типа «var1-var2»

#javascript

#javascript

Вопрос:

Я знаю о .split(«-«, 2), но как я могу сделать что-то подобное

 var str = "123-341235";
alert( str.split( "-",2 ) . [2] )<--- to get second one (341235) value? 
  

Спасибо за помощь всем!

Ответ №1:

Я вижу два простых решения, которые имеют примерно одинаковую производительность:

 var str = "123-341235";
str.split('-')[1]; // => "341235" (slower)
str.slice(str.indexOf('-') 1); // => "341235" (faster)
  

Этот тест jsPerf показывает, что решение «slice / indexOf» примерно в два раза быстрее в Chrome и Firefox.

Обратите внимание, что для любого решения вам придется проверить, что символ hypen действительно существует, прежде чем извлекать вторую часть строки; Я бы поспорил, что добавление проверки все равно делает решение «slice / indexOf» намного быстрее.

Ответ №2:

Вам просто нужно опустить «.» (точка) и начать индекс вашего массива с 0:

 str.split("-", 2)[1];
  

Комментарии:

1. Альтернатива: str.split("-", 2).pop()

2. да, но это не очень эффективно: jsperf.com/split-vs-slice-indexof/4 🙂

Ответ №3:

Я обычно использую это:

 str.split("-", 2).pop()
  

Ответ №4:

В одной строке:

 alert('123-341235'.split('-',2 )[1]);
  

В двух вы могли бы догадаться:

 var str = "123-341235";
alert( str.split('-',2)[1]) );
  

Массивы основаны на нуле, что означает, что первый элемент массива имеет индекс 0, второй индекс 1 и так далее. Кроме того, точка между массивом и значением индекса ( [i] ) генерирует ошибку.

Ответ №5:

Это должно сработать:

 alert( str.split( "-",2 )[0]   '/'   str.split( "-",2 )[1]);
  

Комментарии:

1. $.log( $(значение) . attr( «uid») . split( «-«,2,1 ) [1] ); в основном то же самое. Спасибо вам!

Ответ №6:

 var str = "123-341235";
alert( (str.split("-"))[1] );
  
  • помните, что массивы основаны на нуле, поэтому вторым числом является индекс 1…

Ответ №7:

Самый быстрый, ИМХО

 var str = "123-341235";
alert(str.substr(str.indexOf("-") 1));
  

Комментарии:

1. но теперь быстрее всего писать каждый раз 🙂

Ответ №8:

второй аргумент указывает split, сколько разбиений выполнить. Смотрите

http://www.w3schools.com/jsref/jsref_split.asp

сделать

 var tokens = str.split("-");
tokens[0] // 123
tokens[1] // 341235
  

split возвращает массив результатов, и помните, что массивы основаны на 0, поэтому [0] — это первые результаты, а [1] — второй результат.

Ответ №9:

Вопрос JavaScript по SO никогда не бывает полным без некоторого излишества регулярных выражений :

 var tokens = /^d -(d )$/.exec(str);

if (tokens) {
    console.log(tokens[1]);
}
  

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

Комментарии:

1. Кто сказал, что это всегда будет оцифровано 🙂 лучше [^-] ?-.* на самом деле. Также это может быть в одной строке: токены =/…/?токены[1]: false; , как я понял 😉