我试图用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]
请假设一切都是动态的,所以没有任何东西可以硬编码。
有没有办法可以做到这一点?
答案 0 :(得分:0)
有几种不同的方法可以实现这一目标。一种方法是使用表达式[
在每个/(?=\[)/
字符处拆分两个字符串。这只是一个积极的前瞻,将在每个[
字符后面匹配。然后,您可以映射新数组,同时按索引比较每个数组中的元素。
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;