如何使用 Javascript 截断/切片/修剪字符串中的最后一个字符?

问:

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

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

答1:

huntsbot.com洞察每一个产品背后的需求与收益,从而捕获灵感

您可以使用 substring 函数:

让 str = “12345.00”; str = str.substring(0, str.length - 1);控制台.log(str);

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

让 str = “12345.00”; str = str.slice(0, -1);控制台.log(str);

@Kheu - 切片符号对我来说更清晰。我以前使用的是子字符串版本。谢谢!

如果我错了,请原谅我,但您不需要再次将 str.substring 的值分配给 str 吗?喜欢str = str.substring(0, str.length -1);

slice & substring 方法都是一样的;除了 slice() 接受一个负索引,相对于字符串的结尾,而不是 substring,它会抛出 out-of-bound 错误

如果有人想知道,substring 比 slice 快 11%。 jsperf.com/js-slice-vs-substring-test

substring 是疯狂的微优化,我认为你不应该这样做。首先最大化可读性。如果需要,然后优化低悬的果实。

答2:

huntsbot.com – 高效赚钱,自由工作

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

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

与公认的解决方案相比,这更加优雅,甚至可以与动态创建的字符串一起使用

我喜欢这种方式,因为它结合了 php 对 substr 函数的思考,更容易记忆和即时编写。

@SameerAlibhai 我同意你的观点,但是 substring 方法也不能用于动态字符串吗?通过使用 str.length 来动态获取长度?

应该补充一点,第一个索引是包含的,第二个是排除的。

这适用于删除最后一个字符,但要注意是否要删除可变数量的字符; .slice(0, -0) 将返回一个空字符串!

答3:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

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

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

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

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

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

slice 在这里更好。 s.slice(0, -4)

或者: s.slice(0, -"_bar".length) (如果不想硬编码字符数,则很有用)

我喜欢这个,因为他还提供了替换指定结尾的帮助。

如果字符串中有多个实例,第二个示例将仅删除“_bar”的第一个实例

答4:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

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

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

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

常量 s = “你的字符串”; const withoutLastChunk = s.slice(0, s.lastIndexOf(“_”));控制台.log(没有LastChunk);

答5:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

对于像您的示例这样的数字,我建议在 substring 上执行此操作:

console.log(parseFloat(‘12345.00’).toFixed(1));

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

console.log(parseFloat(‘12345.46’).toFixed(1));

+1这是OP所需要的,忘记有要修剪的字符串的错误假设。

这不是一个错误的假设,OP 谈论的是字符串。你的假设是错误的,因为 OP 没有谈论四舍五入的数字。

答6:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

使用 JavaScript 的切片函数:

让字符串 = ‘foo_bar’; string = string.slice(0, -4); // 在此处切掉最后四个字符 console.log(string);

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

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

答7:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

请注意 String.prototype.{ split, slice, substr, substring } 对 UTF-16 编码的字符串进行操作

之前的答案都不是 Unicode 感知的。在大多数现代 JavaScript 引擎中,字符串被编码为 UTF-16,但更高的 Unicode 代码点需要 surrogate pairs,因此旧的、预先存在的字符串方法在 UTF-16 代码单元上运行,而不是 Unicode 代码点。见:Do NOT use .split(‘’)。

常量字符串 = “ẞ🦊”; console.log(string.slice(0, -1)); // “ẞ\ud83e” console.log(string.substr(0, string.length - 1)); // “ẞ\ud83e” console.log(string.substring(0, string.length - 1)); // “ẞ\ud83e” console.log(string.replace(/.KaTeX parse error: Undefined control sequence: \ud at position 15: /, "")); // "ẞ\̲u̲d̲83e" console.lo…/)[1]); // “ẞ\ud83e” const utf16Chars = string.split(“”); utf16Chars.pop(); console.log(utf16Chars.join(“”)); // “ẞ\ud83e”

此外,如旧答案中所建议的,RegExp 方法不匹配末尾的换行符:

const string = “你好,世界!\n”; console.log(string.replace(/.KaTeX parse error: Undefined control sequence: \n at position 18: … "").endsWith("\̲n̲")); // true co…/) === null); // 真的

使用字符串迭代器来迭代字符

Unicode 感知代码利用字符串的迭代器;请参阅 Array.from 和 … spread。也可以使用 string[Symbol.iterator](例如,代替 string)。

另见How to split Unicode string to characters in JavaScript。

例子:

常量字符串 = “ẞ🦊”; console.log(Array.from(string).slice(0, -1).join(“”)); // “ẞ” console.log([ …string ].slice(0, -1).join(“”)); // “ẞ”

在 RegExp 上使用 s 和 u 标志

dotAll or s flag 使 . 匹配换行符,unicode or u flag 启用某些与 Unicode 相关的功能。请注意,当使用 u 标志时,您消除了不必要的身份转义,因为 these are invalid in a u regex,例如 [ 很好,因为它会启动一个没有反斜杠的字符类,但 : 不是,因为它是带或不带反斜杠的 :,因此您需要删除反斜杠。

例子:

const unicodeString = “ẞ🦊”, lineBreakString = “你好,世界!\n”; console.log(lineBreakString.replace(/.KaTeX parse error: Undefined control sequence: \n at position 19: … "").endsWith("\̲n̲")); // false c…/s) === null); // false console.log(unicodeString.replace(/. / s u , " " ) ) ; / / ẞ c o n s o l e . l o g ( u n i c o d e S t r i n g . m a t c h ( / ( . ∗ ) . /su, "")); // ẞ console.log(unicodeString.match(/(.*). /su,""));//ẞconsole.log(unicodeString.match(/(.)./su)[1]); // ẞ // 现在 split 可以识别 Unicode: const unicodeCharacterArray = unicodeString.split(/(?😃/su), lineBreakCharacterArray = lineBreakString.split(/(?😃/su); unicodeCharacterArray.pop(); lineBreakCharacterArray.pop(); console.log(unicodeCharacterArray.join(“”)); // “ẞ” console.log(lineBreakCharacterArray.join(“”).endsWith(“\n”)); // 错误的

请注意,某些字素包含多个代码点,例如 🏳️‍🌈 由序列 🏳 (U+1F3F3)、VS16 (U+FE0F)、ZWJ (U+200D)、🌈 (U+1F308) 组成。在这里,即使是 Array.from 也会将其拆分为四个“字符”。使用 RegExp set notation and properties of strings proposal 可以更轻松地匹配这些内容。

谢谢你的解释。确实,它拓宽了视野。

答8:

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

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

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

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

这解决了条件删除而不是盲目截断的相关问题

答9:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

尝试这个:

const myString = “你好世界!”; console.log(myString.slice(0, -1));

答10:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

使用正则表达式:

让 aStr = “12345.00”; aStr = aStr.replace(/.$/, ‘’);控制台.log(aStr);

除了不支持 Unicode 之外,这也不匹配换行符。

答11:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

表现

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

结论

slice(0,-1)(D) 是短字符串和长字符串的快速或最快解决方案,建议作为快速跨浏览器解决方案

基于 substring © 和 substr(E) 的解决方案很快

基于正则表达式 (A,B) 的解决方案速度慢/中快

对于长字符串,解决方案 B、F 和 G 很慢

解决方案 F 对于短字符串最慢,G 对于长字符串最慢

https://i.stack.imgur.com/YfBgV.png

细节

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

对于 8-char 短字符串(来自 OP 问题) - 你可以在这里运行它

对于 1M 长的字符串 - 你可以在这里运行它

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

函数 A(str) { return str.replace(/.KaTeX parse error: Expected 'EOF', got '}' at position 9: /, ''); }̲ 函数 B(str) { re…/)[1]; } function C(str) { return str.substring(0, str.length - 1); } 函数 D(str) { 返回 str.slice(0, -1); } function E(str) { return str.substr(0, str.length - 1); } 函数 F(str) { 让 s= str.split(“”); s.pop();返回 s.join(“”); } 函数 G(str) { 让 s=‘’; for(让 i=0; iconsole.log(${f.name}: ${f( “12345.00”)}); [A,B,C,D,E,F,G].map(f=>log(f));此代码段仅提供解决方案

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

https://i.stack.imgur.com/JDigN.png

原文链接:https://www.huntsbot.com/qa/w78y/how-do-i-chop-slice-trim-off-last-character-in-string-using-javascript?lang=zh_CN&from=csdn

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值