Tricky字符串替换为使用Javascript组合的2个字符串

时间:2016-01-13 19:12:03

标签: javascript regex string

我试图用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 个答案:

答案 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;