Javascript循环替换字符串中的数据
我有一小段代码,我正在尝试替换它。有两个数据对象。一个是包含{variable}的URL列表,另一个是这些变量的替换值的对象 我已经创建了一些代码来尝试让它工作,但我认为可能有一种更有效的方法来处理这个问题Javascript循环替换字符串中的数据,javascript,Javascript,我有一小段代码,我正在尝试替换它。有两个数据对象。一个是包含{variable}的URL列表,另一个是这些变量的替换值的对象 我已经创建了一些代码来尝试让它工作,但我认为可能有一种更有效的方法来处理这个问题 // Content we will look through and replace variables in let urls = [ 'http://www.example.com/{var1}/{var2}', 'http://www.example.com/{var
// Content we will look through and replace variables in
let urls = [
'http://www.example.com/{var1}/{var2}',
'http://www.example.com/{var1}/{var4}',
];
// Data used for the replacement
let variables = [{
variable: 'var1',
value: '123'
},
{
variable: 'var2',
value: '456'
},
{
variable: 'var4',
value: '789'
}]
// Will hold the final URLs
let finalURLs = [];
// Loop over all URLS
for (let index = 0; index < urls.length; ++index) {
// Loop over all variables
for (let d = 0; d < data.length; ++d) {
// Set the replaced URL
let u = urls[index].replace('{' + data[d].variable + '}', data[d].value);
finalURLs.push(u);
}
}
// Desired output
finalURLs = [
'http://www.example.com/123/456',
'http://www.example.com/123/789'
]
我确信我在这方面做得很差,但我正在寻找一些关于如何做的建议。您可以使用,并且。使用正则表达式全局应用替换
常量URL=[
'http://www.example.com/{var1}/{var2}',
'http://www.example.com/{var1}/{var4}',
];
常量变量=[
{变量:“var1”,值:“123'},
{变量:“var2”,值:“456'},
{变量:'var4',值:'789'}
];
const result=url.mapurl=>{
variables.forEach{variable,value}=>{
url=url.replacenew RegExp`{${variable}}`,'g',value;
};
返回url;
};
console.logresult 您继续替换URL[index]的原始值,而不是先前替换的值
for (let index = 0; index < urls.length; ++index) {
let cur_url = urls[index];
// Loop over all variables
for (let d = 0; d < data.length; ++d) {
// Set the replaced URL
cur_url = cur_url.replace('{' + data[d].variable + '}', data[d].value);
}
finalURLs.push(cur_url);
}
您可以将一个对象作为替换字符串并替换所有找到的值 var url=['http://www.example.com/{var1}/{var2}','http://www.example.com/{var1}/{var4}'], vars={var1:'123',var2:'456',var4:'789'}, result=url.maps=>s.replace/\{[^}]*?\}/g,\ uv=>v在vars中?vars[v]:v;
console.logresult 一种方法是使用正则表达式匹配括号中的每个变量,然后在按变量索引的对象中查找替换项,其值为替换项: //我们将浏览并替换中的变量的内容 让URL=[ 'http://www.example.com/{var1}/{var2}', 'http://www.example.com/{var1}/{var4}', ]; //用于替换的数据 设变量=[{ 变量:“var1”, 值:“123” }, { 变量:“var2”, 值:“456” }, { 变量:“var4”, 值:“789” }]; const replacements=variables.reducea,{variable,value}=>{ a[变量]=值; 返回a; }, {}; constpattern=newregexp Object.keysreplacements.MapPinele=>`{${Pinele}}}`。加入“|”, 'g'//全局匹配;全部替换 ; const newurl=url.mapurl=> url.replacepattern,不带括号=>{ //修剪前支架和后支架: 常量针=NeedWithBrands.slice1,NeedWithBrands.length-1; 返回替换[针]; } ;
console.lognewurl 这似乎可以用一个简单的方法解决 我希望我了解你的确切情况
另一个注意事项是,如果变量可能包含特殊字符,则应使用What is data(数据是什么?)我认为它应该是变量,但这几乎就是实现这一点的方法。编写代码总是有多种方法,但是有两个数组需要交互,所以需要两个嵌套循环。这没什么问题。这是怎么做的?对于2个输入URL,使用该代码可以得到6个输出URL@Amunium@JaromandaX-是的,他不小心用了数据而不是变量。这里有一些问题,但问题是效率,实际上没有什么可以改进的。他需要两个嵌套循环,不管他使用for循环还是map/forEach。从概念上讲,这没什么问题,他只需要消除bug;我不明白你的替换方法的第二个参数是什么?以下划线作为参数的函数,该函数从未使用过。。。什么?你需要一个参数占位符。\u是一个常用符号,表示未使用此参数。根据MDN,如果函数在replace方法中作为参数传递,则该函数的第一个参数为matched string,第二个参数为第n个matched元素,在这种情况下,下划线为matched string{var},v为相同的东西,但没有括号,你能给我解释一下吗?是的,但我只需要卷发里面的一部分,不需要整条。
const variables = { var1: '123', var2: '323', var4:'254'}
const finalUrls = [
`http://www.example.com/${variables.var1}/{variables.var2}`,
`http://www.example.com/${variables.var1}/{variables.var4}`
]