#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 О, да, вы правы. Спасибо, что указали. Я исправил.