Получение строки после первого _

#javascript

#javascript

Вопрос:

У меня есть строка, такая как ABC_DEF_GHI .

Используя JavaScript, мне нужно получить все после первого _ (то есть DEF_GHI в данном случае). В строке может быть любое количество _ .

Если я сделаю что-то вроде

 var str = "ABC_DEF_GHI_JKL";
var n = str.lastIndexOf('_');
var output = str.substring(n   1);
  

Это дало бы мне все после последнего подчеркивания. Однако мне нужно все после первого подчеркивания. Не удалось найти такой метод, как firstIndexOf, который дал бы мне все после первого _

Ответ №1:

Вы должны заменить свой lastIndexOf() на indexOf() , который будет принимать первое вхождение

 var str = "ABC_DEF_GHI_JKL";
var n = str.indexOf('_');
var output = str.substring(n   1);
console.log(output);  

Ответ №2:

 var str = "ABC_DEF_GHI",
pos = str.indexOf("_");
result = str.slice(pos 1);
console.log(result);  

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

1. Не уверен, почему вы проголосовали против, поэтому я проголосую за вас. Поскольку кто-то здесь был троллем с отрицательным голосованием.

2. @Keith Возможно, его голос был отклонен, потому что он не дал никаких объяснений, что не является хорошей практикой. Но где-то я согласен с вами, люди, которые голосуют против, должны добавить комментарий, объясняющий, почему они голосуют против…

Ответ №3:

 console.log("ABC_DEF_GHI_JKL".split('_').slice(1).join('_'));  

Приведенное выше просто разбивает вашу строку на массив, разделяя на _ , а затем отбрасывает первый элемент массива, а затем соединяет их обратно с _ .

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

1. И понижение было для?.. Использование indexOf в любом случае не является отличным решением. Что, если вы позже захотите получить все после второго _. Голосование против это просто показывает, насколько узколобы некоторые в Stack Overflow . Или, по крайней мере, имейте манеры, чтобы объяснить свое отрицательное голосование.

2. Требование состоит в том, чтобы получить часть после первого подчеркивания. Каноническим решением для этого требования является использование indexOf . Если требование меняется, меняется и код. Нет смысла добавлять код, который решает теоретические, будущие требования. Особенно когда этот код стоит дороже, чем простое решение.

3. @str Это было требованием -> Используя JavaScript, мне нужно получить все после первого _ (то есть DEF_GHI в данном случае). Требованием не было исправлять его код. Прочитайте его сообщение еще раз. Если английский не является вашим родным языком, я прощу вас. Голосование без причины просто превращает людей в троллей, голосующих против. Не подходит для переполнения стека.

4. Английский действительно не мой родной язык, но я прекрасно понимаю вопрос. Но чего я не понимаю, так это смысла вашего комментария. И ваш ответ, и использование indexOf дают один и тот же результат, а именно «DEF_GHI_JKL». Вы имеете в виду тот факт, что вопрос и код не совпадают («DEF_GHI_JKL» против «DEF_GHI»)? Тем не менее, чрезмерная разработка теоретических требований бесполезна.

5. @str Я согласен, что решение Кейта «дороже». Но это единственный момент, который может быть спорным, и, с моей точки зрения, он не оправдывает понижение. И наоборот, я не согласен с тем, что «добавление кода, который решает теоретические будущие требования», было бы плохим. Как давний разработчик (десятки лет) Я твердо придерживаюсь мнения, что всегда полезно не выбирать быстро наиболее очевидное и простое решение, а подумать о том, как оно может быть более общим, даже без немедленной необходимости . Исходя из этого, я думаю, что неплохо сообщить о такого рода советах новичкам.

Ответ №4:

Один из способов сделать это

 var str = "ABC_DEF_GHI",
    pos = str.indexOf("_");
 result = str.slice(pos 1);
 console.log(result);  

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

1. Я не собираюсь отвергать вас здесь, как это делают некоторые люди. Но я укажу, что результат немного неправильный.

2. @Keith О, да, вы правы. Спасибо, что указали. Я исправил.