2324

我有一个字符串,,12345.00我希望它返回12345.0

我看过trim,但看起来它只是修剪空白slice,我看不出它是如何工作的。有什么建议么?

4

25 回答 25

3690

您可以使用子字符串函数:

let str = "12345.00";
str = str.substring(0, str.length - 1);
console.log(str);

这是公认的答案,但根据下面的对话,切片语法更加清晰:

let str = "12345.00";
str = str.slice(0, -1); 
console.log(str);

于 2009-06-04T20:35:48.930 回答
1454

你可以使用切片!你只需要确保你知道如何使用它。正数是相对于开头的,负数是相对于结尾的。

js>"12345.00".slice(0,-1)
12345.0
于 2009-06-04T21:41:42.480 回答
272

您可以使用JavaScript 字符串对象的substring方法:

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

它无条件地从 string 中删除最后四个字符s

但是,如果您想有条件地删除最后四个字符,只有当它们完全是 _bar

var re = /_bar$/;
s.replace(re, "");
于 2010-08-30T03:08:49.463 回答
172

最简单的方法是使用slice字符串的方法,它允许负位置(对应于从字符串末尾的偏移量):

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

如果您需要更通用的东西来删除(包括)最后一个下划线之后的所有内容,您可以执行以下操作(只要s保证至少包含一个下划线):

const s = "your_string";
const withoutLastChunk = s.slice(0, s.lastIndexOf("_"));
console.log(withoutLastChunk);

于 2010-08-30T10:15:57.770 回答
72

对于像您的示例这样的数字,我建议您这样做substring

console.log(parseFloat('12345.00').toFixed(1));

请注意,这实际上会将数字四舍五入,但我认为这是需要的,但可能不是:

console.log(parseFloat('12345.46').toFixed(1));

于 2009-06-04T20:42:16.673 回答
32

使用 JavaScript 的切片函数:

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

这可用于删除任何长度的字符串末尾的“_bar”。

于 2014-02-27T11:14:26.067 回答
25
于 2020-05-13T22:49:19.820 回答
23

正则表达式是您正在寻找的:

let str = "foo_bar";
console.log(str.replace(/_bar$/, ""));

于 2010-08-30T03:09:02.557 回答
13

试试这个:

const myString = "Hello World!";
console.log(myString.slice(0, -1));

于 2013-08-28T20:31:43.333 回答
11

使用正则表达式:

let aStr = "12345.00";
aStr = aStr.replace(/.$/, '');
console.log(aStr);

于 2015-07-29T04:58:25.460 回答
11

表现

今天 2020.05.13 我在 MacOs High Sierra v10.13.6 上对 Chrome v81.0、Safari v13.1 和 Firefox v76.0 上的所选解决方案进行了测试。

结论

  • (D) 是短字符串和长字符串的slice(0,-1)快速或最快解决方案,推荐作为快速跨浏览器解决方案
  • 基于substring(C) 和substr(E) 的解决方案很快
  • 基于正则表达式 (A,B) 的解决方案速度慢/中快
  • 对于长字符串,解决方案 B、F 和 G 很慢
  • 解决方案 F 对于短字符串最慢,G 对于长字符串最慢

在此处输入图像描述

细节

我对解决方案ABCD、 E( ext )、F、 G(my)执行两个测试

解决方案显示在下面的代码片段中

function A(str) {
  return str.replace(/.$/, '');
}

function B(str) {
  return str.match(/(.*).$/)[1];
}

function C(str) {
  return str.substring(0, str.length - 1);
}

function D(str) {
  return str.slice(0, -1); 
}

function E(str) {
  return str.substr(0, str.length - 1);
}

function F(str) {
  let s= str.split("");
  s.pop();
  return s.join("");
}

function G(str) {
  let s='';
  for(let i=0; i<str.length-1; i++) s+=str[i];
  return s;
 }



// ---------
// TEST
// ---------

let log = (f)=>console.log(`${f.name}: ${f("12345.00")}`);

[A,B,C,D,E,F,G].map(f=>log(f));
This snippet only presents soutions

以下是 Chrome 的短字符串示例结果

在此处输入图像描述

于 2020-05-13T12:49:03.500 回答
9

怎么样:

let myString = "12345.00";
console.log(myString.substring(0, myString.length - 1));

于 2009-06-04T20:38:11.483 回答
8

1. (.*)多次捕获任意字符:

console.log("a string".match(/(.*).$/)[1]);

2. .,匹配最后一个字符,在这种情况下:

console.log("a string".match(/(.*).$/));

3. $,匹配字符串的结尾:

console.log("a string".match(/(.*).{2}$/)[1]);

于 2012-12-28T04:38:31.777 回答
7

这是我认为我在其他答案中没有看到的另一种选择,只是为了好玩。

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

不像切片或子字符串那样清晰或简单,但确实允许您使用一些不错的数组方法来处理字符串,因此值得了解。

于 2018-03-13T12:03:08.853 回答
5
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
于 2014-05-27T10:47:10.380 回答
4

如果您想对浮点数进行通用舍入,而不是仅仅修剪最后一个字符:

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

编辑:正如 Paolo 指出的那样,似乎存在一个内置函数。该解决方案显然比我的要干净得多。使用parseFloat后跟toFixed

于 2009-06-04T20:47:07.550 回答
3

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

如果您不想要空格,只需使用修剪

"11.01 °C".slice(0,-2).trim()
于 2016-01-15T18:48:43.263 回答
2
if(str.substring(str.length - 4) == "_bar")
{
    str = str.substring(0, str.length - 4);
}
于 2010-08-30T03:08:50.823 回答
1

You can, in fact, remove the last arr.length - 2 items of an array using arr.length = 2, which if the array length was 5, would remove the last 3 items.

Sadly, this does not work for strings, but we can use split() to split the string, and then join() to join the string after we've made any modifications.

var str = 'string'

String.prototype.removeLast = function(n) {
  var string = this.split('')
  string.length = string.length - n

  return string.join('')
}

console.log(str.removeLast(3))

于 2020-09-09T00:29:37.050 回答
1

Via slice(indexStart, indexEnd) method - note, this does NOT CHANGE the existing string, it creates a copy and changes the copy.

console.clear();
let str = "12345.00";
let a = str.slice(0, str.length -1)
console.log(a, "<= a");
console.log(str, "<= str is NOT changed");

Via Regular Expression method - note, this does NOT CHANGE the existing string, it creates a copy and changes the copy.

console.clear();
let regExp = /.$/g
let b = str.replace(regExp,"")
console.log(b, "<= b");
console.log(str, "<= str is NOT changed");

Via array.splice() method -> this only works on arrays, and it CHANGES, the existing array (so careful with this one), you'll need to convert a string to an array first, then back.

console.clear();
let str = "12345.00";
let strToArray = str.split("")
console.log(strToArray, "<= strToArray");
let spliceMethod = strToArray.splice(str.length-1, 1)
str = strToArray.join("")
console.log(str, "<= str is changed now");
于 2020-10-29T03:47:29.207 回答
0

如果您想删除接近字符串末尾的内容(如果是可变大小的字符串),您可以结合使用 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);
于 2016-08-19T18:17:38.640 回答
-1

Try to use toFixed

const str = "12345.00";
return (+str).toFixed(1);
于 2021-10-13T18:08:33.750 回答
-2

试试这个:

<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/上尝试实时工作示例。

于 2012-12-27T14:13:40.533 回答
-4

@杰森小号:

你可以使用切片!你只需要确保你知道如何使用它。正数是相对于开头的,负数是相对于结尾的。

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

对不起我的笔迹,但帖子之前被标记为“jquery”。因此,您不能在 jQuery 中使用 slice(),因为slice()是用于操作 DOM 元素而不是子字符串的 jQuery 方法......换句话说,回答@Jon Erickson建议非常完美的解决方案。

但是,您的方法将在简单的 Javascript 中使用 jQuery 函数。由于评论中的最后讨论,需要说 jQuery 比他自己的父母最知名的 ECMAScript 更经常是 JS 的可更新扩展。

这里也存在两种方法:

作为我们的:

string.substring(from,to) 加上如果'to'索引为空,则返回字符串的其余部分。所以: string.substring(from) 正面或负面...

和其他一些 - substr() - 提供子字符串的范围和“长度”只能是正数: string.substr(start,length)

此外,一些维护人员建议最后一种方法string.substr(start,length)对 MSIE 不起作用或出现错误。

于 2010-08-03T16:52:38.940 回答
-8

使用 substring 获取 _bar 左侧的所有内容。但首先你必须在字符串中获取 _bar 的 instr:

str.substring(3, 7);

3是开始,7是长度。

于 2010-08-30T03:08:02.993 回答