JavaScript chop/slice/trim off последний символ в строке

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

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

22 ответов


можно использовать подстрока функция:

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

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

var str = "12345.00";
str = str.slice(0, -1); // "12345.0"

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

js>"12345.00".slice(0,-1)
12345.0

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

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

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

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

var re = /_bar$/;
s.replace(re, "");

самый простой способ-использовать 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"

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

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

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

alert(parseFloat('12345.46').toFixed(1)); // 12345.5

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

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

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


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

var str = "foo_bar";
alert(str.replace(/_bar$/, ""));

Как насчет:

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

"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
  1. (.* ), захватывает любой символ несколько раз
  2. ., соответствует последнему символу, в этом случае
  3. $ соответствует концу строки

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

var aStr = "12345.00";
aStr = aStr.replace(/.$/, '');

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

попробуйте это:

var myString = "Hello World!";
myString.slice(0, -1);

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

var strArr = "hello i'm a string".split("");
strArr.pop();
document.write(strArr.join(""));

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


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

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


var str = "test!";
var newStr = str.slice(0,-1); //test

if(str.substring(str.length - 4) == "_bar")
{
    str = str.substring(0, str.length - 4);
}

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

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

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

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


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

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

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);

Я предпочитаю функцию substring:

var str = "12345.00";

str = str.подстрока (0, str.длина - 1);

функция среза также можно использовать:

var str = "12345.00";

str = str.slice (-1); // передача отрицательного значения в качестве первого аргумента удаляет символы из end. Это то же самое, что и str.slice (0, -1)

результат с обоими методами - "12345.0".


@Jason S:

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

js> "12345.00".метод Slice(0,-1) 12345.0

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

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

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

as наши:

string.substring(from,to) as plus, если индекс " to " nulled возвращает остальную часть строки. Итак: string.substring(from) положительным или отрицательным ...

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

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


попробуйте это:

<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/.


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

str.substring(3, 7);

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