我有一个函数replaceNextParameter()
,它通过一个字符串替换两个字符串之间的文本,我将其标记为sub1
和sub2
。字符串可能包含0,1或多个sub1
和sub2
。我希望它执行函数replaceNextparameter
,直到不再存在sub1
和sub2
并返回结果。
这是我的代码:
function findAllParametersInString (string, sub1, sub2, parameterAndInputArray) {
newString = string
if (newString.indexOf(sub1) > -1 && newString.indexOf(sub2) > -1) {
newString = replaceNextParameter(sub1, sub2, newString, parameterAndInputArray);
}
return newString
};
以下是它应该做的实时示例。
//data:
const paramsArray = [
{param: "company", input: "COMPANY"},
{param: "url", input: "URL"},
]
const sampleMessage = "BlaBlaBla {{company}} and {{url}}"
findAllParametersInString(sampleMessage,'{{', '}}', paramsArray);
//Should return "BlaBlaBla COMPANY and URL"
知道怎么解决吗?目前它只返回"BlaBlaBla COMPANY and {{url}}"
解决方案:
function findAllParametersInString (string, sub1, sub2, parameterAndInputArray) {
newString = string
while (newString.indexOf(sub1) > -1 && newString.indexOf(sub2) > -1) {
newString = replaceNextParameter(sub1, sub2, newString, parameterAndInputArray);
}
return newString
};
答案 0 :(得分:1)
我建议您将param
值用作关键字,将input
值用作单个对象中的值。像这样:
var params = {
company: "COMPANY",
url: "URL"
};
现在使用这个简单的功能:
var sampleMessage = "BlaBlaBla {{company}} and {{url}}";
function replace(str, map) {
for (var key in map) {
str = str.split('{{' + key + '}}').join(map[key]);
}
return str;
}
replace(sampleMessage, params); // -> "BlaBlaBla COMPANY and URL"
您可以在{{
函数中使用}}
和replace
的参数
答案 1 :(得分:1)
虽然晚了,但我希望这种解决方案可能适合某人。
我认为最好的解决方案是使用正则表达式,因为它是您要处理的字符串。
尽管我不确定parameterAndInputArray
的用途。
所以我会用这个(尽管可以创建更好的正则表达式):
let newstring = oldstring.replace(/sub1/gi,replacement1).replace(/sub2/gi,replacement2)
如果要删除replacement[1/2]
,其中'@'
是要替换的字符,例如(''
或空引号(sub[1/2]
)。
答案 2 :(得分:0)
function findAllParametersInString (string, sub1, sub2, parameterAndInputArray) {
newString = string
while (newString.indexOf(sub1) > -1 && newString.indexOf(sub2) > -1) {
newString = replaceNextParameter(sub1, sub2, newString, parameterAndInputArray);
}
return newString
};
这个技巧是否基于@Flemming