我有一个字符串12345.00
,我希望它返回12345.0
。
我看过trim
,但看起来它只是修剪空白和slice
我看不出这是怎么回事。有什么建议吗?
答案 0 :(得分:2879)
您可以使用substring功能:
var str = "12345.00";
str = str.substring(0, str.length - 1); // "12345.0"
这是接受的答案,但根据下面的对话,slice语法更加清晰:
var str = "12345.00";
str = str.slice(0, -1); // "12345.0"
答案 1 :(得分:1228)
您可以使用slice!你只需要确保你知道如何使用它。正#s相对于开头,负数相对于结尾。
js>"12345.00".slice(0,-1)
12345.0
答案 2 :(得分:252)
您可以使用JavaScript字符串对象的substring方法:
s = s.substring(0, s.length - 4)
它无条件地删除字符串s
中的最后四个字符。
但是,如果你想有条件地删除最后四个字符,只有当它们完全 _bar
时才会删除:
var re = /_bar$/;
s.replace(re, "");
答案 3 :(得分:154)
最简单的方法是使用字符串的slice
方法,该方法允许负位置(对应于字符串末尾的偏移量):
var s = "your string";
var withoutLastFourChars = s.slice(0, -4);
如果你需要一些更通用的东西去除(包括)最后一个下划线后的所有内容,你可以执行以下操作(只要s
保证包含至少一个下划线):
var s = "your_string";
var withoutLastChunk = s.slice(0, s.lastIndexOf("_"));
// withoutLastChunk == "your"
答案 4 :(得分:66)
对于像您的示例这样的数字,我建议您在substring
上执行此操作:
alert(parseFloat('12345.00').toFixed(1)); // 12345.0
请注意,这实际上会对数字进行舍入,但我认为这是理想的但可能不是:
alert(parseFloat('12345.46').toFixed(1)); // 12345.5
答案 5 :(得分:27)
使用JavaScript切片功能:
var string = 'foo_bar';
string = string.slice(0, -4); // Slice off last four characters here
这可用于删除任意长度的字符串末尾的“bar”。
答案 6 :(得分:15)
您正在寻找正则表达式:
var str = "foo_bar";
alert(str.replace(/_bar$/, ""));
答案 7 :(得分:9)
怎么样:
var myString = "12345.00";
myString.substring(0, myString.length - 1);
答案 8 :(得分:8)
试试这个:
var myString = "Hello World!";
myString.slice(0, -1);
答案 9 :(得分:7)
"a string".match(/(.*).$/)[1] // => a strin
"a string".match(/(.*).$/) // returns ["a string", "a strin"]
"a string".match(/(.*).{2}$/)[1] // to get two chars off => a stri
答案 10 :(得分:7)
String.prototype.{ split, slice, substr, substring }
对UTF-16编码的字符串起作用以前的答案中没有一个是支持Unicode的。 在大多数现代JavaScript引擎中,字符串都编码为UTF-16,但是更高的Unicode代码点需要calculated property,因此,较早存在的字符串方法只能在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的代码利用了字符串的迭代器;请参阅surrogate pairs和Array.from
。
也可以使用...
spread(例如代替string
)。
示例:
const string = "ẞ?";
console.log(Array.from(string).slice(0, -1).join("")); // "ẞ"
console.log([
...string
].slice(0, -1).join("")); // "ẞ"
s
上使用u
和RegExp
标志 How to split Unicode string to characters in JavaScript使.
匹配换行符,dotAll
or s
flag启用某些与Unicode相关的功能。
请注意,在使用u
标志时,您可以消除不必要的标识转义符,例如unicode
or u
flag,例如\[
很好,因为它会在不带反斜杠的情况下启动字符类,但是\:
则不是,因为它是一个带反斜杠或不带反斜杠的:
,因此您需要删除反斜杠
示例:
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),these are invalid in a u
regex,VS16
(U+FE0F),?
(U + 1F308)组成。
在这里,即使Array.from
也会将其分为四个“字符”。
可以通过ZWJ
(U+200D)进行匹配。
答案 11 :(得分:7)
使用正则表达式:
var aStr = "12345.00";
aStr = aStr.replace(/.$/, '');
答案 12 :(得分:5)
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
答案 13 :(得分:5)
这是一个替代方案,我认为我没有在其他答案中看到过,只是为了好玩。
var strArr = "hello i'm a string".split("");
strArr.pop();
document.write(strArr.join(""));
不像切片或子串那样清晰或简单,但允许你使用一些不错的数组方法来使用字符串,所以值得了解。
答案 14 :(得分:4)
var str = "test!";
var newStr = str.slice(0,-1); //test
答案 15 :(得分:3)
如果你想对浮动进行泛型舍入,而不是仅仅修剪最后一个字符:
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
答案 16 :(得分:3)
今天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)的解决方案很快解决方案在下面的代码段中显示
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浏览器的示例结果
答案 17 :(得分:1)
if(str.substring(str.length - 4) == "_bar")
{
str = str.substring(0, str.length - 4);
}
答案 18 :(得分:1)
答案 19 :(得分:1)
最短的方法:
str.slice(0, -1);
答案 20 :(得分:0)
通过slice(indexStart,indexEnd)方法-请注意,这不会更改现有字符串,它会创建一个副本并更改该副本。
console.clear();
let str = "12345.00";
let a = str.slice(0, str.length -1)
console.log(a, "<= a");
console.log(str, "<= str is NOT changed");
通过正则表达式方法-请注意,这不会更改现有字符串,它会创建一个副本并更改该副本。
console.clear();
let regExp = /.$/g
let b = str.replace(regExp,"")
console.log(b, "<= b");
console.log(str, "<= str is NOT changed");
通过array.splice()方法->仅适用于数组,并且更改现有数组(对此要格外小心),您需要先将字符串转换为数组,然后再转换为数组。 / p>
console.clear();
let str = "12345.00";
let strToArray = str.split("")
console.log(strToArray, "<= strToArray");
let spliceMethod = strToArray.splice(str.length-1, 1)
str = strToArray.join("")
console.log(str, "<= str is changed now");
答案 21 :(得分:0)
实际上,您可以使用sysparm_view=viewName
删除数组的最后arr.length - 2
个项目,如果数组长度为5,则会删除最后3个项目。
遗憾的是,这不适用于字符串,但是我们可以使用arr.length = 2
来分割字符串,然后在进行任何修改后使用split()
来加入字符串。
join()
答案 22 :(得分:-1)
如果要删除接近字符串末尾的内容(如果是可变大小的字符串),可以组合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);
答案 23 :(得分:-3)
@Jason S:
你可以使用切片!你只需要 确保你知道如何使用它。 积极的#s是相对的 开头,负数是 相对于结束。
JS&gt; “中12345.00” .slice(0,-1) 12345.0
对不起我的graphomany但是帖子之前标记为“jquery”。所以, 你不能在jQuery中使用 slice(),因为 slice()是用于操作的jQuery方法DOM元素,而不是子串...... 换句话说,回答 @Jon Erickson 提出了非常完美的解决方案。
但是,你的方法将在jQuery函数中运行,在简单的Javascript中。 需要说的是由于在评论中的最后讨论,jQuery更多的是JS的可再生扩展,而不是他自己的父母最知名的ECMAScript。
这里也有两种方法:
作为我们的:
string.substring(from,to)
为加号,如果'to'索引为空,则返回字符串的其余部分。这样:
string.substring(from)
正面或负面......
和其他一些 - substr() - 提供子字符串范围和'length'只能是正数:
string.substr(start,length)
另外一些维护者建议最后一个方法string.substr(start,length)
不起作用或对MSIE有误。
答案 24 :(得分:-3)
试试这个:
<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/上尝试实时工作示例。
答案 25 :(得分:-6)
使用substring来获取_bar左侧的所有内容。但首先你必须在字符串中获得_bar的内容:
str.substring(3, 7);
3是开始,7是长度。