0

"[TITLE] [STORENAME] [DYNAMIC]".replace(regex, `$1|${replace}=${value}]`);多次使用,但每次在使用之前,我都会更改变量replace。查看完整代码:

obj = {} || obj;
const replace = 'prefix';
let search = 'TITLE';
const value = 'MY VALUE';
const regex = new RegExp(`(\\[${search}(?:\\|[^\\][]*)?)]`, 'gi');

obj.str = "[TITLE] [STORENAME] [DYNAMIC]".replace(regex, `$1|${replace}=${value}]`);

search = 'STORENAME';
obj.str = "[TITLE] [STORENAME] [DYNAMIC]".replace(regex, `$1|${replace}=${value}]`);

search = 'DYNAMIC';
obj.str = "[TITLE] [STORENAME] [DYNAMIC]".replace(regex, `$1|${replace}=${value}]`);

console.log(obj.str);

所以如你所见,我得到了结果[TITLE|prefix=MY VALUE] [STORENAME] [DYNAMIC],但目标是得到这个结果:[TITLE|prefix=MY VALUE] [STORENAME|prefix=MY VALUE] [DYNAMIC|prefix=MY VALUE].

可能是因为我replace()再次使用相同的字符串,但我也尝试过这种方式:

obj = {} || obj;
obj.str = '[TITLE] [STORENAME] [DYNAMIC]';

const replace = 'prefix';
let search = 'TITLE';
const value = 'MY VALUE';

const regex = new RegExp(`(\\[${search}(?:\\|[^\\][]*)?)]`, 'gi');

obj.str = obj.str.replace(regex, `$1|${replace}=${value}]`);

search = 'STORENAME';
obj.str = obj.str.replace(regex, `$1|${replace}=${value}]`);

search = 'DYNAMIC';
obj.str = obj.str.replace(regex, `$1|${replace}=${value}]`);

console.log(obj.str);

但输出仍然不正确。

4

2 回答 2

2

看看这段代码:

obj = {} || obj;
obj.str = '[TITLE] [STORENAME] [DYNAMIC]';

const replace = 'prefix';
const value = 'MY VALUE';

obj.str.split(" ").forEach(function(val){
  let search = val.replace("[", "").replace("]", "");
  let regex = new RegExp(`(\\[${search}(?:\\|[^\\][]*)?)]`, 'gi');
  obj.str = obj.str.replace(regex, `$1|${replace}=${value}]`);
})


console.log(obj.str);

于 2020-10-27T13:34:06.713 回答
1

您假设 reg exp 自动更新。它没有,你需要为每个人做一个正则表达式。

使用带有通用 reg exp 的查找对象。

var replacements = {
 FOO: "Hello",
 BAR: "World",
 BAZ: "Funky Pants"
};

var reExp = /\[([^\]]+)\]/g;

// function replaceIt(str, replacements) {
//  return str.replace(reExp, function (match) {
//    return replacements[match.substring(1, match.length-1)] || match;
//  });
// }

function replaceIt(str, replacements) {
  return str.replace(reExp, function (match) {
    var key = match.substring(1, match.length-1);
    var text = replacements[key];
    if (!text) return match
    return `[${key}|prefix=${text}]`;
  });
}

console.log(replaceIt("[FOO] [BAR] [BAZ]", replacements));
console.log(replaceIt("[FOO] [BAR] [CHEESE]", replacements));

于 2020-10-27T13:34:57.027 回答