用2个字符串替换2个字符串的棘手字符串

问题描述:

我想用2个字符串做一些棘手的事情,我不知道如何去做。这是一种向后匹配/替换。我想要替换字符串内部匹配的任何内容。棘手的部分是,我想要替换的字符串部分是另一个字符串的一部分,它基于找到匹配的位置。用2个字符串替换2个字符串的棘手字符串

我有以下变量一起工作:

var keepMe = '#INDEX_NESTED#'; 
var stringFind = 'test[#INDEX#][nested][#INDEX_NESTED#][dcap]'; 
var stringReplace = 'test[0][nested][0][dcap]'; 

的目标是让下面的输出:

test[0][nested][#INDEX_NESTED#][dcap] 

此外,假设一切都是动态的,所以没有什么可以硬编码。

有没有办法可以做到这一点?

+1

简单的方法是'(众人面前)(您想配什么)(毕竟)'和你有三件。 – sln

+0

您能否提供一些示例代码如何操作?我仍然没有遵循.. – Rick

+0

是的,我只是想通过使用子位置或类似的东西,有人会有一些聪明的方式来做到这一点。我可以退后一步,看看我能否在核心脚本中做一些不同的事情。谢谢! – Rick

有几种不同的方法来实现这一点。一种方法是使用表达式/(?=\[)/在每个[字符处分割两个字符串。这只是一个积极的预测,将匹配每个[字符后面。然后你可以映射一个新的数组,同时通过索引来比较每个数组中的元素。

var replaceArray = stringReplace.split(/(?=\[)/); 
var result = stringFind.split(/(?=\[)/).map(function (value, index) { 
    return value.indexOf(keepMe) > -1 ? value : replaceArray[index]; 
}).join(''); 

完整的示例:

var keepMe = '#INDEX_NESTED#'; 
 
var stringFind = 'test[#INDEX#][nested][#INDEX_NESTED#][dcap]'; 
 
var stringReplace = 'test[0][nested][0][dcap]'; 
 

 
var replaceArray = stringReplace.split(/(?=\[)/); 
 
var result = stringFind.split(/(?=\[)/).map(function (value, index) { 
 
    return value.indexOf(keepMe) > -1 ? value : replaceArray[index]; 
 
}).join(''); 
 

 
document.body.textContent = result;

+1

谢谢一堆Josh!这正是我正在寻找的.. – Rick