Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何循环字符串并替换除最后一个句点之外的所有句点?_Javascript_Loops_Replace_Each - Fatal编程技术网

Javascript 如何循环字符串并替换除最后一个句点之外的所有句点?

Javascript 如何循环字符串并替换除最后一个句点之外的所有句点?,javascript,loops,replace,each,Javascript,Loops,Replace,Each,假设我有这样一个字符串: 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);

假设我有这样一个字符串:

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以某种方式迭代除最后一个以外的所有名称。我应该怎么做呢?

考虑将“.”上的字符串拆分,然后将除最后一个之外的所有字符串重新连接到“\ux”:

var test=my.long.file.name.zip; 零件=测试。拆分'; var plen=零件长度; 如果plen>1{ 测试=零件0,正压-1。连接+ . + 零件[plen-1]; }
控制台日志测试 请考虑拆分“.”上的字符串,然后将除最后一个字符串外的所有字符串重新连接到“\u1”:

var test=my.long.file.name.zip; 零件=测试。拆分'; var plen=零件长度; 如果plen>1{ 测试=零件0,正压-1。连接+ . + 零件[plen-1]; }
控制台日志测试 regex中的前瞻组将工作:

var test='my.long.file.name.zip'; var结果=测试。替换/\。?=[^.]*\。/g';
结果 regex中的前瞻组将工作:

var test='my.long.file.name.zip'; var结果=测试。替换/\。?=[^.]*\。/g';
结果 你不一定需要一个循环,你可以用一个更复杂的正则表达式,它使用

regex/\.?=.*\./g查找句点,但仅在后面某个地方有后续句点时才查找,这意味着最后一个句点不匹配

window.onload=函数{ var input=my.long.file.name.zip 变量结果=输入。替换/\。?=.*./g,''u' 结果;
} 你不一定需要一个循环,你可以用一个更复杂的正则表达式,它使用

regex/\.?=.*\./g查找句点,但仅在后面某个地方有后续句点时才查找,这意味着最后一个句点不匹配

window.onload=函数{ var input=my.long.file.name.zip 变量结果=输入。替换/\。?=.*./g,''u' 结果;
}关于这一点,jQuery没有什么内容——它是普通的javascript,所以我更新了你的问题。好的,谢谢。我只是在一个jQuery函数中做这件事,所以我专注于此。jQuery中没有关于这件事的任何东西——它是普通的javascript,所以我更新了你的问题。好的,谢谢。我只是在一个jQuery函数中做这件事,所以我把重点放在了这一点上。这是因为它提供了最简洁的代码和易于理解的解释。谢谢。另外,我的.long..file.name.zip.replace/\.{1,}?=..*./g,“\u”仅用一个下划线替换点序列:my\u long\u file\u name.zip这是最简洁的代码,解释简单易懂。谢谢。另外,我的.long..file.name.zip.replace/\.{1,}?=.*./g,“\u”仅用一个下划线替换点序列:my\u long\u file\u name.zip
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);