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

我看了一下trim,但它看起来只是在修剪空白和切片,我不知道这是如何工作的。有什么建议吗?


当前回答

表演

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

结论

切片(0,-1)(D)是短字符串和长字符串的快速或最快解决方案,建议作为快速跨浏览器解决方案基于子字符串(C)和子字符串(E)的解决方案是快速的基于正则表达式(A,B)的解决方案是慢/中快的解决方案B、F和G对于长字符串来说很慢解决方案F对于短字符串最慢,对于长字符串最慢

细节

我对解决方案A、B、C、D、E(ext)、F、G(my)进行了两次测试

对于8个字符的短字符串(来自OP问题)-您可以在这里运行对于1M长的字符串-您可以在这里运行

解决方案在以下片段中介绍

函数A(str){return str.replace(/.$/,“”);}函数B(str){返回str.match(/(.*).$/)[1];}函数C(str){返回str.substring(0,str.length-1);}函数D(str){返回str.slice(0,-1);}函数E(str){返回str.substr(0,str.length-1);}函数F(str){设s=str.split(“”);s.pop();return s.join(“”);}函数G(str){让s=“”;对于(设i=0;i<str.length-1;i++)s+=str[i];返回s;}// ---------//测试// ---------let log=(f)=>console.log(`${f.name}:${f(“12345.00”)}`);[A,B,C,D,E,F,G].map(F=>log(F));此代码段仅显示源

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

其他回答

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

str.substring(3, 7);

3是起点,7是长度。

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

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

console.log(“字符串”.match(/(.*).$/)[1]);

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

console.log(“字符串”.match(/(.*).$/));

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

console.log(“字符串”.match(/(.*).{2}$/)[1]);

@杰森S:你可以用切片!你只需要确保你知道如何使用它。正数与开始,负数是相对于末端。js>“12345.00”.切片(0,-1)12345

对不起,我的写手,但帖子早些时候被标记为“jquery”。因此,不能在jQuery中使用slice(),因为slice(()是jQuery方法,用于使用DOM元素的操作,而不是子字符串。。。换言之,回答@Jon Erickson提出了非常完美的解决方案。

然而,您的方法将在简单的Javascript中使用jQuery函数。需要指出的是,由于上次在评论中的讨论,jQuery是JS的可更新扩展,而不是他自己的父级最著名的ECMAScript。

这里还存在两种方法:

作为我们的:

string。substring(from,to)as plus if“to”index null返回字符串的其余部分。因此:string.substring(from)正或负。。。

而其他一些-substr()-提供子字符串的范围,“length”只能为正:string.substr(开始,长度)

还有一些维护人员建议,最后一个方法string.substr(start,length)不起作用,或者对MSIE有错误。

正则表达式是您要查找的:

让str=“foo_bar”;console.log(str.replace(/_bar$/,“”));