JavaScript нарезать / вырезать / обрезать последний символ в строке

1230

У меня есть строка, 12345.00, и я бы хотел, чтобы она вернула 12345.0.

Я просмотрел trim, но похоже, что это только обрезание пробелов и slice, которые я не вижу, как это будет работать. Любые предложения?

  • 34
    Вы заботитесь о округлении? 12345,46 = 12345,5 или 12345,4?
  • 9
    Знаете ли вы, что такое суффикс, или вы хотите разделить и удалить последнее слово на основе ваших подчеркиваний?
Показать ещё 3 комментария
Теги:
slice
trim

21 ответ

2100
Лучший ответ

Вы можете использовать функцию substring:

var str = "12345.00";
str = str.substring(0, str.length - 1);

Это принятый ответ, но в соответствии с приведенными ниже беседами синтаксис slice гораздо яснее:

var str = "12345.00";
str = str.slice(0, -1);
  • 14
    @Kheu - обозначение среза намного чище для меня. Ранее я использовал версию подстроки. Спасибо!
  • 27
    простите, если я ошибаюсь, но вам не нужно снова присваивать значение str.substring для str? Например, str = str.substring(0, str.length -1);
Показать ещё 10 комментариев
1026

Вы можете использовать slice! Вам просто нужно убедиться, что вы знаете, как его использовать. Положительные #s относятся к началу, отрицательные числа относятся к концу.

js>"12345.00".slice(0,-1)
12345.0
  • 66
    По сравнению с принятым решением это более элегантно и может использоваться даже с динамически создаваемыми строками.
  • 8
    Производительность тоже похожа. jsperf.com/slice-vs-substring-trim-end
Показать ещё 7 комментариев
229

Вы можете использовать substring метод строковых объектов JavaScript:

s = s.substring(0, s.length - 4)

Он безоговорочно удаляет последние четыре символа из строки s.

Однако, если вы хотите условно удалить последние четыре символа, только если они точно _bar:

var re = /_bar$/;
s.replace(re, "");
  • 105
    slice лучше здесь. s.slice(0, -4)
  • 12
    В качестве альтернативы: s.slice (0, - "_ bar" .length) (полезно, если не требуется жестко задавать количество символов)
Показать ещё 1 комментарий
134

Самый простой способ - использовать метод slice для строки, которая допускает отрицательные позиции (соответствующие смещениям от конца строки):

var s = "your string";
var withoutLastFourChars = s.slice(0, -4);

Если вам понадобилось что-то более общее для удаления всего после (и включая) последнего подчеркивания, вы можете сделать следующее (пока s не будет содержать хотя бы одно подчеркивание):

var s = "your_string";
var withoutLastChunk = s.slice(0, s.lastIndexOf("_"));
// withoutLastChunk == "your"
60

Для числа, подобного вашему примеру, я бы рекомендовал сделать это над substring:

alert(parseFloat('12345.00').toFixed(1)); // 12345.0

Заметьте, что это будет фактически округлять число, хотя, как мне кажется, желательно, но, возможно, нет:

alert(parseFloat('12345.46').toFixed(1)); // 12345.5
  • 11
    +1 Это то, что нужно ОП, забудьте про ложное предположение, что есть строки, которые нужно обрезать.
  • 1
    Это не ложное предположение, OP говорит о строках. Ваше ложное предположение, потому что OP не говорит о округлении чисел.
14

Использование функции среза JavaScript:

var string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here

Это можно использовать для удаления '_bar' в конце строки с любой длиной.

12

Регулярное выражение - это то, что вы ищете:

var str = "foo_bar";
alert(str.replace(/_bar$/, ""));
  • 0
    Ваше решение работает, но ответ Алекса является более полным. Поэтому я приму его. Спасибо!
  • 1
    Это решает связанную проблему условного удаления, а не слепого усечения
8

Как насчет:

var myString = "12345.00";
myString.substring(0, myString.length - 1);
5

Использовать регулярное выражение:

var aStr = "12345.00";
aStr = aStr.replace(/.$/, '');
5
"a string".match(/(.*).$/)[1] // => a strin

"a string".match(/(.*).$/) // returns ["a string", "a strin"]

"a string".match(/(.*).{2}$/)[1] // to get two chars off => a stri
  • (. *), захватывает любой символ несколько раз
  • ., соответствует последнему символу, в этом случае
  • $, соответствует концу строки
  • 9
    Мне это нравится, потому что, несмотря на .splice (), вы нашли способ использовать регулярные выражения.
4
debris = string.split("_") //explode string into array of strings indexed by "_"

debris.pop(); //pop last element off the array (which you didn't want)

result = debris.join("_"); //fuse the remainng items together like the sun
4

Попробуйте следующее:

var myString = "Hello World!";
myString.slice(0, -1);
3
var str = "test!";
var newStr = str.slice(0,-1); //test
  • 1
    Что это добавляет, по сравнению со всеми другими ответами?
2

https://jsfiddle.net/invos/w3zeqv6v/

https://stackoverflow.com/questions/34817546/javascript-how-to-delete-last-two-characters-in-a-string

Просто используйте обрезку, если вы не хотите пробелов

"11.01 °C".slice(0,-2).trim()

2

Если вы хотите сделать общее округление поплавков, а не просто обрезать последний символ:

var float1 = 12345.00,
    float2 = 12345.4567,
    float3 = 12345.982;

var MoreMath = {
    /**
     * Rounds a value to the specified number of decimals
     * @param float value The value to be rounded
     * @param int nrDecimals The number of decimals to round value to
     * @return float value rounded to nrDecimals decimals
     */
    round: function (value, nrDecimals) {
        var x = nrDecimals > 0 ? 10 * parseInt(nrDecimals, 10) : 1;
        return Math.round(value * x) / x;
    }
}

MoreMath.round(float1, 1) => 12345.0
MoreMath.round(float2, 1) => 12345.5
MoreMath.round(float3, 1) => 12346.0

EDIT: Похоже, для этого существует встроенная функция, как указывает Паоло. Это решение, очевидно, намного чище, чем мое. Используйте parseFloat, за которым следует toFixed

0

Попробуйте следующее:

<script>
    var x="foo_foo_foo_bar";
    for (var i=0; i<=x.length; i++) {
        if (x[i]=="_" && x[i+1]=="b") {
            break;
        }
        else {
            document.write(x[i]);
        }
    }
</script>

Вы также можете попробовать живой рабочий пример на http://jsfiddle.net/informativejavascript/F7WTn/87/.

  • 3
    Спасибо, Камаль. Тем не менее, я отметил ответ выше, как принятый для моих нужд. Обратите внимание на зеленую галочку выше. Хотя я проверил твой код. :) Теперь, в моей ситуации, я знаю только общую последовательность конечных символов. Было бы лучше просто начать проверку с конца строки. Ваше предложение потерпит неудачу, если у меня будет строка, похожая на «foo_b_bar», и я хочу только удалить последний «_bar». Спасибо хоть! Это довольно интересный опыт, чтобы задать вопрос более 2 лет назад, и до сих пор получать ответы на него сегодня. :)
0
if(str.substring(str.length - 4) == "_bar")
{
    str = str.substring(0, str.length - 4);
}
-1

@Jason S:

Вы можете использовать срез! Вам просто нужно убедитесь, что вы знаете, как его использовать. Положительные # относятся к начало, отрицательные числа относительно конца.

JS > "12345,00".slice(0, -1) 12345,0

Извините за мой графин, но сообщение было помечено как "jquery" раньше. Итак, вы не можете использовать slice() внутри jQuery, потому что slice() - это метод jQuery для операций с элементами DOM, а не подстроки., Другими словами, ответ @Jon Erickson предлагает действительно идеальное решение.

Однако ваш метод будет работать из функции jQuery, внутри простого Javascript. Необходимо сказать из-за последнего обсуждения в комментариях, что jQuery - это гораздо более частое расширение JS, чем его собственный родитель, самый известный ECMAScript.

Здесь также существуют два метода:

как наш:

string.substring(from,to) как плюс, если 'to' index nulled возвращает остальную строку. так: string.substring(from) положительный или отрицательный...

и некоторые другие - substr() - которые предоставляют диапазон подстроки и 'length' могут быть только положительными: string.substr(start,length)

Также некоторые сопровождающие предполагают, что последний метод string.substr(start,length) не работает или работает с ошибкой для MSIE.

  • 2
    Что вы имеете в виду? String.prototype.slice является нативным методом
  • 0
    это только то, что ты сказал. Собственный метод Javascript, а также метод jQuery slice() для манипулирования DOM: API jQuery: .slice () . И конечно, это можно изобразить как полиморфное наследование JS Array.slice (), но это два разных метода, и я думаю, что это нужно различать. Так что это всего лишь приближение к этим знаниям.
Показать ещё 7 комментариев
-2

В тех случаях, когда вы хотите удалить что-то, что близко к концу строки (в случае строк с переменным размером), вы можете комбинировать slice() и substr().

У меня была строка с разметкой, динамически построенная, со списком якорных тегов, разделенных запятой. Строка была примерно такой:

var str = "<a>text 1,</a><a>text 2,</a><a>text 2.3,</a><a>text abc,</a>";

Чтобы удалить последнюю запятую, я сделал следующее:

str = str.slice(0, -5) + str.substr(-4);
-3
String.prototype.replaceAll = function(search, replacement) {
    var splitted = this.split('.');
    var returnVal = '';
    for(var i=0; i<splitted.length; i++) {
        returnVal = returnVal + splitted[i] + replacement;
    }
    returnVal = returnVal.substring(0, returnVal.length - replacement.length);
    return returnVal;
};
-6

Используйте подстроку, чтобы получить все слева от _bar. Но сначала вы должны получить instr _bar в строке:

str.substring(3, 7);

3 - это начало, а 7 - длина.

  • 1
    это работает только для "foo_bar", а не для "foo_foo_bar", вопрос был о строке любой длины, но с известным концом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню