Phi*_*ord 1840 javascript trim slice chop
我有一个字符串,12345.00我希望它能够返回12345.0.
我看过trim,但它看起来只是修剪空白slice,我不明白这是如何工作的.有什么建议?
Jon*_*son 3023
您可以使用子字符串函数:
let str = "12345.00";
str = str.substring(0, str.length - 1);
console.log(str);Run Code Online (Sandbox Code Playgroud)
这是可接受的答案,但根据下面的对话,切片语法更清晰:
let str = "12345.00";
str = str.slice(0, -1);
console.log(str);Run Code Online (Sandbox Code Playgroud)
Jas*_*n S 1253
你可以使用切片!你只需要确保你知道如何使用它.正#s相对于开头,负数相对于结尾.
js>"12345.00".slice(0,-1)
12345.0
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 255
您可以使用JavaScript字符串对象的substring方法:
s = s.substring(0, s.length - 4)
Run Code Online (Sandbox Code Playgroud)
它无条件地从字符串中删除最后四个字符s.
但是,如果要有条件地删除最后四个字符,只有它们完全符合 _bar:
var re = /_bar$/;
s.replace(re, "");
Run Code Online (Sandbox Code Playgroud)
Tim*_*own 157
最简单的方法是使用slice字符串的方法,它允许负位置(对应于字符串末尾的偏移量):
const s = "your string";
const withoutLastFourChars = s.slice(0, -4);
Run Code Online (Sandbox Code Playgroud)
如果你需要更通用的东西去除(包括)最后一个下划线后的所有内容,你可以执行以下操作(只要s保证至少包含一个下划线):
const s = "your_string";
const withoutLastChunk = s.slice(0, s.lastIndexOf("_"));
console.log(withoutLastChunk);Run Code Online (Sandbox Code Playgroud)
Pao*_*ino 67
对于像你的例子这样的数字,我建议这样做substring:
console.log(parseFloat('12345.00').toFixed(1));Run Code Online (Sandbox Code Playgroud)
请注意,这实际上将围绕数字,但我想象的是希望,但可能不是:
console.log(parseFloat('12345.46').toFixed(1));Run Code Online (Sandbox Code Playgroud)
Aks*_*shi 29
使用JavaScript的切片功能:
let string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here
console.log(string);Run Code Online (Sandbox Code Playgroud)
这可用于删除任何长度的字符串末尾的"_bar".
w35*_*l3y 18
您正在寻找正则表达式:
let str = "foo_bar";
console.log(str.replace(/_bar$/, ""));Run Code Online (Sandbox Code Playgroud)
小智 14
\n\n\n如果您不需要空格,只需使用修剪
\n
"11.01 \xc2\xb0C".slice(0,-2).trim()\nRun Code Online (Sandbox Code Playgroud)\n
Seb*_*mon 11
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"Run Code Online (Sandbox Code Playgroud)
此外,RegExp如旧答案中所建议的,方法在末尾不匹配换行符:
const string = "Hello, world!\n";
console.log(string.replace(/.$/, "").endsWith("\n")); // true
console.log(string.match(/(.*).$/) === null); // trueRun Code Online (Sandbox Code Playgroud)
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("")); // "?"Run Code Online (Sandbox Code Playgroud)
s和u标志RegExp该dotAll或s标志品牌.相匹配换行符,则unicode或u标志启用某些Unicode相关功能。请注意,在使用u标志时,您可以消除不必要的身份转义,因为这些在uregex 中是无效的,例如\[很好,因为它会启动一个没有反斜杠的字符类,但\:不是,因为它是:有或没有反斜杠的,因此您需要删除反斜杠。
例子:
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")); // falseRun Code Online (Sandbox Code Playgroud)
请注意,某些字素由多个代码点??组成,例如,由(U+1F3F3)、VS16(U+FE0F)、ZWJ(U+200D)、(U+1F308) 序列组成。在这里,evenArray.from将其拆分为四个“字符”。使用RegExp 集合表示法和字符串提案的属性更容易匹配这些。
怎么样:
let myString = "12345.00";
console.log(myString.substring(0, myString.length - 1));Run Code Online (Sandbox Code Playgroud)
试试这个:
const myString = "Hello World!";
console.log(myString.slice(0, -1));Run Code Online (Sandbox Code Playgroud)
小智 9
使用正则表达式:
let aStr = "12345.00";
aStr = aStr.replace(/.$/, '');
console.log(aStr);Run Code Online (Sandbox Code Playgroud)
console.log("a string".match(/(.*).$/)[1]);Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
如果您想对浮点数进行通用舍入,而不是仅仅修剪最后一个字符:
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
Run Code Online (Sandbox Code Playgroud)
编辑:正如保罗指出的那样,似乎存在一个内置函数。这个解决方案显然比我的干净得多。使用parseFloat后跟toFixed
小智 5
const str = "test!";
console.log(str.slice(0, -1));Run Code Online (Sandbox Code Playgroud)
这是我认为我没有在其他答案中看到的另一种选择,只是为了好玩。
var strArr = "hello i'm a string".split("");
strArr.pop();
document.write(strArr.join(""));Run Code Online (Sandbox Code Playgroud)
不像slice或substring那样清晰易懂,但确实允许您使用一些不错的数组方法来处理字符串,因此值得一读。
今天 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)进行了两次测试
解决方案显示在下面的代码段中
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));Run Code Online (Sandbox Code Playgroud)
This snippet only presents soutionsRun Code Online (Sandbox Code Playgroud)
以下是 Chrome 短字符串的示例结果