是否可以用一行代码替换数组中的最后一项?
我收到的信息:
return "my.long.string";
我想要什么:
return "my.long.output";
到目前为止的代码:
var value = "my.long.string";
var newValue = value.split(".").pop().join(".") + "output";
错误:
SyntaxError: Unexpected string
更新:
尼娜回答了。我也有一种情况,我需要在字符串的末尾插入一个值(在文件路径中添加名称)。与上面相同,但替换了最后一个点之前 处的所有内容。
var value = "my.long.string";
var result = value.split(".").slice(0, -1).join(".") + "_stats." + "output";
答案 0 :(得分:5)
您可以切片数组并连接最后一个字符串。 Array#slice
对数组末尾的偏移量取负值。
var value = "my.long.string";
value = value.split('.').slice(0, -1).concat('output').join('.');
console.log(value);
答案 1 :(得分:4)
您也不必将其转换为数组。您可以像这样使用lastIndexOf:
const value = "my.long.string";
console.log(`${value.substring(0,value.lastIndexOf('.'))}.output`);
答案 2 :(得分:2)
您可以使用正则表达式(.*\.).*
捕获所有内容,直到最后的.
和replace
为止的最后一个部分都带有新字符串(Regex demo)。 $1
从捕获组获取字符串
let str = "my.long.string"
let newStr = str.replace(/(.*\.).*/, `$1output`);
console.log(newStr)
答案 3 :(得分:0)
var value = "my.long.string";
var newValue = value.split('.').filter((val, idx, arr) => {
return idx < arr.length - 1
}).concat('output').join('.');
答案 4 :(得分:0)
第一个解决方案
var value = "my.long.string";
var newValue = value.split('.').splice(0, value.match(/\./g).length).concat('output').join('.');
console.log(newValue);
第二个解决方案(较短)
var value = "my.long.string";
var newValue = value.split('.').fill('output', value.match(/\./g).length).join('.');
console.log(newValue);
答案 5 :(得分:-1)
您可以尝试以下代码。
var value = "my.long.string";
var newValue = value.replace(new RegExp(value.split(".").pop() + '$'), "output");
答案 6 :(得分:-1)
var value = "my.long.string";
var r = value.split(".").splice(-1, 1).join(".");
var result = r.".output";