我有一个字符串12345.00
,我想将它转换成12345.0
。
我已经查看了trim
,但它似乎只能修剪空格,还有slice
,但我不知道它怎么用。 有什么建议吗?
我有一个字符串12345.00
,我想将它转换成12345.0
。
我已经查看了trim
,但它似乎只能修剪空格,还有slice
,但我不知道它怎么用。 有什么建议吗?
str.substring
的值分配给str
吗?像这样:str = str.substring(0, str.length -1);
- Doug Molineuxslice()
和substring()
方法几乎相同,唯一的区别是slice()
方法接受相对于字符串末尾的负索引,而substring()
方法不接受,它会抛出“越界”错误。 - Amol M Kulkarnisubstring
比 slice
快11%。http://jsperf.com/js-slice-vs-substring-test - BenR你可以使用slice!只需要确保你知道如何使用它。正数相对于开头,负数相对于结尾。
js>"12345.00".slice(0,-1)
12345.0
substring
方法也可以用于动态字符串,通过使用 str.length 来动态获取长度。 - Doug Molineux.slice(0, -0)
会返回一个空字符串! - Nigel Nelsons = s.substring(0, s.length - 4)
它无条件地从字符串s
中删除最后四个字符。
但是,如果你想要有条件地删除最后四个字符,仅当它们恰好为_bar
时:
var re = /_bar$/;
s.replace(re, "");
s.slice(0, -4)
。 - Tim Down最简单的方法是使用字符串的slice
方法,该方法允许使用负数位置(相对于字符串末尾的偏移量):
const s = "your string";
const withoutLastFourChars = s.slice(0, -4);
如果你需要更通用的方法来删除最后一个下划线及其后面的所有内容,只要确保变量s中至少包含一个下划线,就可以采用以下方法(使用JavaScript语言):
```js
s.substring(0, s.lastIndexOf("_"))
```
const s = "your_string";
const withoutLastChunk = s.slice(0, s.lastIndexOf("_"));
console.log(withoutLastChunk);
对于像您的示例这样的数字,我建议优先使用此方法而非substring
:
console.log(parseFloat('12345.00').toFixed(1));
请注意,这将实际舍入数字,虽然我想这是需要的,但不一定:
console.log(parseFloat('12345.46').toFixed(1));
String.prototype.{split,slice,substr,substring}
的操作是基于UTF-16编码的字符串先前的回答都没有考虑Unicode。
在大多数现代JavaScript引擎中,字符串被编码为UTF-16,但较高的Unicode代码点需要代理对,因此旧的、预先存在的字符串方法是基于UTF-16代码单元而不是Unicode代码点进行操作的。
参见:不要使用.split('')
。
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"
const string = "Hello, world!\n";
console.log(string.replace(/.$/, "").endsWith("\n")); // true
console.log(string.match(/(.*).$/) === null); // true
支持Unicode的代码应使用字符串的迭代器;请参见Array.from
和...
spread。
也可以使用string[Symbol.iterator]
(例如,而不是string
)。
另请参阅如何在JavaScript中将Unicode字符串拆分为字符。
示例:
const string = "ẞ";
console.log(Array.from(string).slice(0, -1).join("")); // "ẞ"
console.log([
...string
].slice(0, -1).join("")); // "ẞ"
RegExp
上使用s
和u
标志dotAll
或s
标志使.
匹配换行符,unicode
或u
标志启用某些与Unicode相关的功能。
请注意,当使用u
标志时,您可以消除不必要的转义字符,因为这些在u
正则表达式中是无效的,例如\[
是可以的,因为它会在没有反斜杠的情况下开始一个字符类,但\:
不是,因为它是一个带有或不带有反斜杠的:
,所以您需要删除反斜杠。
示例:
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)组成。即使使用Array.from
也会将其拆分为四个“字符”。使用RegExp set notation and properties of strings proposal可以更轻松地匹配它们。使用JavaScript的slice函数:
let string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here
console.log(string);
这可以用来移除任意长度的字符串末尾的“_bar”。
let str = "foo_bar";
console.log(str.replace(/_bar$/, ""));
const myString = "Hello World!";
console.log(myString.slice(0, -1));
今天2020年5月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(链接)、F和G进行了两次测试
以下是解决方案的代码:
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处理短字符串的示例结果: