如何遍历字符串并替换除最后一个句点以外的所有句点?
How can I loop through string and replace all periods except the last one?
假设我有这样一个字符串:
var test = my.long.file.name.zip
我用 javascript 得到这个字符串中的句点总数,如下所示:
var dots = (test.match(/\./g) || []).length;
如果字符串中有多个句点,我想用下划线替换字符串中的所有句点。
if(dots>"1"){
var newname = test.replace(/\./g, "_");
console.log(newname);
}
问题是这会替换所有句点。我想保持最后一个完好无损。所以我希望 newname
变量按原样读取:
my_long_file_name.zip
我的猜测是我应该使用 $.each()
以某种方式遍历除最后一个以外的所有内容以更改名称。我应该怎么做?
考虑在 '.'
上拆分字符串,然后用 '_'
重新加入除最后一个以外的所有字符串:
var test = "my.long.file.name.zip";
parts = test.split('.');
var plen = parts.length;
if (plen > 1) {
test = parts.slice(0, plen - 1).join('_') +
"." +
parts[plen - 1];
}
console.log(test);
正则表达式中的前瞻组将起作用:
var test = 'my.long.file.name.zip';
var result = test.replace(/\.(?=[^.]*\.)/g, '_');
alert(result);
这匹配一个点后跟('anything but dot' 和另一个点),仅替换组外的内容
您不一定需要循环,您可以使用更复杂的正则表达式来实现,它使用 positive lookahead
正则表达式 /\.(?=.*\.)/g
查找句点,但仅在更远的地方有后续句点的地方,这意味着最后一个句点不匹配。
window.onload = function(){
var input = "my.long.file.name.zip"
var result = input.replace(/\.(?=.*\.)/g,'_')
alert(result);
}
var test = 'my.long.file.name.zip';
var last_index = test.lastIndexOf('.');
var newname = test;
if (-1 !== last_index) {
newname = test.replace(/\./g, '_');
newname = newname.substring(0, last_index).concat('.', newname.substring(last_index + 1));
}
console.log(newname);
假设我有这样一个字符串:
var test = my.long.file.name.zip
我用 javascript 得到这个字符串中的句点总数,如下所示:
var dots = (test.match(/\./g) || []).length;
如果字符串中有多个句点,我想用下划线替换字符串中的所有句点。
if(dots>"1"){
var newname = test.replace(/\./g, "_");
console.log(newname);
}
问题是这会替换所有句点。我想保持最后一个完好无损。所以我希望 newname
变量按原样读取:
my_long_file_name.zip
我的猜测是我应该使用 $.each()
以某种方式遍历除最后一个以外的所有内容以更改名称。我应该怎么做?
考虑在 '.'
上拆分字符串,然后用 '_'
重新加入除最后一个以外的所有字符串:
var test = "my.long.file.name.zip";
parts = test.split('.');
var plen = parts.length;
if (plen > 1) {
test = parts.slice(0, plen - 1).join('_') +
"." +
parts[plen - 1];
}
console.log(test);
正则表达式中的前瞻组将起作用:
var test = 'my.long.file.name.zip';
var result = test.replace(/\.(?=[^.]*\.)/g, '_');
alert(result);
这匹配一个点后跟('anything but dot' 和另一个点),仅替换组外的内容
您不一定需要循环,您可以使用更复杂的正则表达式来实现,它使用 positive lookahead
正则表达式 /\.(?=.*\.)/g
查找句点,但仅在更远的地方有后续句点的地方,这意味着最后一个句点不匹配。
window.onload = function(){
var input = "my.long.file.name.zip"
var result = input.replace(/\.(?=.*\.)/g,'_')
alert(result);
}
var test = 'my.long.file.name.zip';
var last_index = test.lastIndexOf('.');
var newname = test;
if (-1 !== last_index) {
newname = test.replace(/\./g, '_');
newname = newname.substring(0, last_index).concat('.', newname.substring(last_index + 1));
}
console.log(newname);