我有一个字符串,12345.00
并且我希望它返回12345.0
。
我已经看过了trim
,但是看起来它只是在修剪空白,slice
而我看不出它是如何工作的。有什么建议么?
Math.round('0.5') === 1
;)
我有一个字符串,12345.00
并且我希望它返回12345.0
。
我已经看过了trim
,但是看起来它只是在修剪空白,slice
而我看不出它是如何工作的。有什么建议么?
Math.round('0.5') === 1
;)
Answers:
您可以使用substring函数:
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);
str = str.substring(0, str.length -1);
slice
与substring
方法都是最相同; 除了slice()
接受相对于字符串结尾的负索引,而不接受相对值substring
,它会引发out-of-bound
错误
您可以使用slice!您只需要确保您知道如何使用它即可。正号相对于开头,负号相对于结尾。
js>"12345.00".slice(0,-1)
12345.0
substring
方法也不能用于动态字符串吗?通过使用str.length动态获取长度?
您可以使用JavaScript字符串对象的substring方法:
s = s.substring(0, s.length - 4)
它无条件删除string中的最后四个字符s
。
但是,如果要有条件地删除最后四个字符,则只有它们完全相同 _bar
:
var re = /_bar$/;
s.replace(re, "");
slice
在这里更好。s.slice(0, -4)
最简单的方法是使用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);
使用JavaScript的slice函数:
let string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here
console.log(string);
这可用于删除任意长度的字符串末尾的“ _bar”。
使用正则表达式:
let aStr = "12345.00";
aStr = aStr.replace(/.$/, '');
console.log(aStr);
console.log("a string".match(/(.*).$/)[1]);
console.log("a string".match(/(.*).$/));
console.log("a string".match(/(.*).{2}$/)[1]);
如果要对浮点数进行通用舍入,而不是仅修剪最后一个字符:
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
if(str.substring(str.length - 4) == "_bar")
{
str = str.substring(0, str.length - 4);
}
https://jsfiddle.net/invos/w3zeqv6v/
/programming/34817546/javascript-how-to-delete-last-two-characters-in-a-string
如果您不需要空格,请使用修剪
"11.01 °C".slice(0,-2).trim()
今天,2020.05.13我将在MacOs High Sierra v10.13.6上的Chrome v81.0,Safari v13.1和Firefox v76.0上执行所选解决方案的测试。
slice(0,-1)
(d)是快速或短期和长串最快的解决方案,它被推荐作为快速跨浏览器溶液substring
(C)和substr
(E)的解决方案很快我对解决方案A,B,C,D,E(ext),F,G(my)执行了两个测试
解决方案在下面的代码段中提供
这是短字符串的Chrome结果示例
String.prototype.{ split, slice, substr, substring }
对UTF-16编码的字符串进行操作先前的答案都不是支持Unicode的。在大多数现代JavaScript引擎中,字符串被编码为UTF-16,但是更高的Unicode代码点需要代理对,因此,较早的,已存在的字符串方法可在UTF-16代码单元上运行,而不是在Unicode代码点上运行。
const string = "ẞ🦊";
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(/.$/, "")); // "ẞ\ud83e"
console.log(string.match(/(.*).$/)[1]); // "ẞ\ud83e"
const utf16Chars = string.split("");
utf16Chars.pop();
console.log(utf16Chars.join("")); // "ẞ\ud83e"
此外,RegExp答案在当前形式的末尾与换行符不匹配:
const string = "Hello, world!\n";
console.log(string.replace(/.$/, "").endsWith("\n")); // true
console.log(string.match(/(.*).$/) === null); // true
支持Unicode的代码利用了字符串的迭代器。看到Array.from
并...
传播。
string[Symbol.iterator]
也可以使用(例如代替string
)。
另请参见如何在JavaScript中将Unicode字符串拆分为字符。
例子:
const string = "ẞ🦊";
console.log(Array.from(string).slice(0, -1).join("")); // "ẞ"
console.log([
...string
].slice(0, -1).join("")); // "ẞ"
s
和u
标志RegExp
该dotAll
或s
标志品牌.
相匹配换行符,则unicode
或u
标志启用某些Unicode相关功能。
例子:
const unicodeString = "ẞ🦊",
lineBreakString = "Hello, world!\n";
console.log(lineBreakString.replace(/.$/s, "").endsWith("\n")); // false
console.log(lineBreakString.match(/(.*).$/s) === null); // false
console.log(unicodeString.replace(/.$/su, "")); // ẞ
console.log(unicodeString.match(/(.*).$/su)[1]); // ẞ
// Now `split` can be made Unicode-aware:
const unicodeCharacterArray = unicodeString.split(/(?:)/su),
lineBreakCharacterArray = lineBreakString.split(/(?:)/su);
unicodeCharacterArray.pop();
lineBreakCharacterArray.pop();
console.log(unicodeCharacterArray.join("")); // "ẞ"
console.log(lineBreakCharacterArray.join("").endsWith("\n")); // false
请注意,一些字素由一个以上的代码点🏳️🌈
组成,例如,由序列🏳
(U + 1F3F3),VS16
(U + FE0F),ZWJ
(U + 200D)和🌈
(U + 1F308)组成。在这里,even Array.from
会将其分为四个“字符”。可以通过Unicode属性转义序列属性提案来匹配它们。
如果要删除接近字符串末尾的内容(对于可变大小的字符串),可以将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);
@Jason S:
您可以使用切片!您只需要确保您知道如何使用它即可。正号相对于开头,负号相对于结尾。
js>“ 12345.00” .slice(0,-1)12345.0
对不起,我的graphomany但帖子早些时候被标记为“ jquery”。因此,您不能 在jQuery中使用 slice(),因为slice()是使用DOM元素(而不是子字符串)进行操作的jQuery方法。换句话说,答案@Jon Erickson提出了真正完美的解决方案。
但是,您的方法将无法在简单的Javascript中使用jQuery函数。需要说的是,由于在评论中进行了最后的讨论,所以jQuery是JS的可更新扩展,而不是其父辈最著名的ECMAScript。
这里也存在两种方法:
作为我们的:
string.substring(from,to)
如果“ to”索引为空,则返回字符串的其余部分。所以:
string.substring(from)
正面或负面...
其他一些-substr()-提供子字符串和'length'的范围只能是正数:
string.substr(start,length)
另外,一些维护者建议,最后一种方法string.substr(start,length)
不起作用,或者MSIE出错。
String.prototype.slice
是一种本地方法
slice()
用于DOM操作的jQuery 方法:jQuery API:.slice()。可以肯定的是,它可以像JS Array.slice()的多态继承一样来计算,但是它是两种不同的方法,我认为需要将其区分开。因此,这只是对这些知识的近似。
.slice
是字符串变量,它将按照OP的要求进行操作。没关系是在“ jQuery内部”,也没有办法以任何方式“干扰”,除非您String.prototype
用jQuery 覆盖,我相信这将阻止任何javascript代码正常工作。您的答案只是说其他答案不好,您提供的论点是不正确的。
.data
操作并最终得到了这个“字符串”),那么如果您调用slice
它,不会做你想要的。就是说,这实际上不是一个有用的答案。
尝试这个:
<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/上尝试该在线示例。
使用子字符串将所有内容移到_bar的左侧。但是首先您必须在字符串中获得_bar的指令:
str.substring(3, 7);
3是开始,7是长度。