2016-04-01 136 views
0

如何一次替换多个字符串?例如,有一个像下面的代码:Node.js立即替换多个字符串

// the 'content' is part of html, so it all addjoined, 
// but I delete some tags and sepeate tag to look clean 
// *** the content is mongodb data 

var content ='<p>ggfhjghgk<a class="mg-popup-img" href="/uploads/2016040117124079.png"><img class="pop" style="max-width: 100%; max-height: 100%;" src="/uploads/2016040117124079.png" /></a></p> 

'

我所要做的是,替换图片名称为新的。所以每个文件名都会有所不同。像这样:

<p>ggfhjghgk<a class="mg-popup-img" href="/uploads/2016050117124079.png"><img class="pop" style="max-width: 100%; max-height: 100%;" src="/uploads/2016050117124079.png" /></a></p> 

我使用Google搜索,并找到了几个docuemnts。像这样的:Replace multiple strings at once 于是,我就

String.prototype.replaceArray = function(find, replace) { 
var replaceString = this; 
for (var i = 0; i < find.length; i++) { 
    replaceString = replaceString.replace(find[i], replace[i]); 
} 
    return replaceString; 
}; 

var originals = ['20160401', '20160402', '20160403']; 
var newnames = ['20160501', '20160502', '20160503']; 

var newcontent = content.replaceArray(originals, newnames); 
console.log(newcontent); // not working properly.-> It's not changed. 

我怎样才能做到这一点属性格式?其实,我正在尝试实施“文章复制任务”。当用户复制文章时,如果文章有图像标签,我应该复制图像文件并将图像src替换为新的。赞赏任何指针......谢谢。

+0

请及时清理你的代码,或者更好的解释。就目前而言,您所展示的代码是**而不是真正的JavaScript。你在使用React JSX吗?提到这一点。但即使你这样做,这个“内容”分配也绝对不行。 –

+0

@ Mike'Pomax'Kamermans这个'content'是actullay mongo db数据,它有很多双引号。对不起,但我不知道如何表达它.. – Juntae

+0

因此请在你的问题中解释一下。你从MongoDB获取数据。成像你必须编写一个单元测试:内容*实际上*包含了什么,它可以在没有mongodb连接的情况下继续工作?显示*。 –

回答

1

如果它是一个单一的字符串,你可以regex它:

// search for /uploads/(anything).png 
 
var regex = /(\/uploads\/)(.+?)(\.png)/gi; 
 
var counter = 0; 
 
var str = '<img class="pop" src="/uploads/20160401.png" /><img class="pop" src="/uploads/20160402.png" /><img class="pop" src="/uploads/20160403.png" />'; 
 

 
// replace /uploads/(anything).png with /uploads/mynewfile(counter).png 
 
var result = str.replace(regex, function() { 
 
    var path = arguments[1], 
 
     extension = arguments[3]; 
 

 
    return path + 'mynewfile' + (++counter) + extension; 
 
}); 
 

 
console.log(str); 
 
console.log(result);