替换句子中的字符串

3

我有一个要求,需要在一个句子中替换一个字符串。以下是我的代码

情况1(有效):namesArray中有一些名字

var response = "Thank you for your request [VARIABLE]. [VARIABLE] will assit you.";
i = 0; 
namesArray= ['Emmy', 'John']
response.replace(/\[VARIABLE\]/g, str => {
var replace = namesArray[i];
i++;
return replace;
});
Output = Thank you for your request Emmy. John will assist you.

上述代码运行良好,但有时“namesArray”可能会有空值,在这种情况下,输出将在替换位置(即“request .”)中具有空格。如何在替换空值时删除该空格。

CASE 2(不起作用):namesArray 具有空值

var response = "Thank you for your request [VARIABLE]. [VARIABLE] will assit you.";
i = 0; 
namesArray = ['', 'John']
response.replace(/\[VARIABLE\]/g, str => {
var replace = namesArray[i];
i++;
return replace;
});

Output = Thank you for your request . John will assist you.

期望输出 = 感谢您的请求。John将为您提供帮助。


如果数组中的第i个名称为空,则替换为空字符串,否则用名称本身替换。 - CinCout
现在我正在用空字符串替换,并在替换位置得到空格,即“request .”。我想要删除那个空格并将其显示为“request.”。 - Dibish
1
同时捕获请求后面的空格,然后进行相应的替换。 - CinCout
2个回答

3
您可以匹配 [VARIABLE] 前面的空格,并有条件地将其替换回去:

const response = "Thank you for your request [VARIABLE]. [VARIABLE] will assist you.";
let i = 0;
const namesArray = ['', 'John'];

const result = response.replace(/(\s*)\[VARIABLE\]/g, (m0, spaces) => {
  const replace = namesArray[i++];
  return replace ? spaces + replace : '';
});

console.log(result);


0

好的,我不知道你从哪里得到这些名字。但根据你提供的信息,我会用默认值填充namesArray。 例如,namesArray = ['user','agent'] 如果你的名字来源替换了用户或代理,你将看到正确的结果,否则你将得到空格而不是用户或代理。


根据我的要求,我无法预先填充我的名字数组。我正在尝试如果数组中没有名称,则将其留为空白而不是空格。 - Dibish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接