Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript (多个)用数组替换字符串_Javascript_Jquery_Replace - Fatal编程技术网

Javascript (多个)用数组替换字符串

Javascript (多个)用数组替换字符串,javascript,jquery,replace,Javascript,Jquery,Replace,我有一根大绳子,需要换几次。比如 var str="Username:[UN] Location:[LC] Age:[AG] ... " str=str.replace("[UN]","Ali") str=str.replace("[LC]","Turkey") str=str.replace("[AG]","29") ... //lots of replace ... 有没有办法将这些查找和替换参数放入一个数组中,并同时替换所有参数?例如: reps = [["UN","Ali"], ["

我有一根大绳子,需要换几次。比如

var str="Username:[UN] Location:[LC] Age:[AG] ... "

str=str.replace("[UN]","Ali")
str=str.replace("[LC]","Turkey")
str=str.replace("[AG]","29")
...
//lots of replace
...
有没有办法将这些查找和替换参数放入一个数组中,并同时替换所有参数?例如:

reps = [["UN","Ali"], ["LC","Turkey"], ["AG","29"], ...]
$(str).replace(reps)
不需要jQuery

var reps = {
  UN: "Ali",
  LC: "Turkey",
  AG: "29",
  ...
};

return str.replace(/\[(\w+)\]/g, function(s, key) {
   return reps[key] || s;
});
  • 正则表达式
    /\[(\w+\]/g
    查找表单
    [XYZ]
    的所有子字符串
  • 只要找到这样的模式,就会调用
    .replace
    的第二个参数中的函数来获取替换
  • 它将搜索关联数组并尝试返回替换项(如果键存在)(
    reps[key]
  • 否则,将返回原始子字符串(
    s
    ),即不替换任何内容。(请参阅以了解
    |
    如何实现此功能。)
您可以执行以下操作:

var array = {"UN":"ALI", "LC":"Turkey", "AG":"29"};

for (var val in array) {
  str = str.split(val).join(array[val]);
}

+1,尽管:这假定替换永远不会是空字符串@用户:如果有时替换为空字符串,则将函数体更改为
var rep=reps[key];return typeof rep==“未定义”?s:代表
刚刚在Chrome的控制台上试用过,但不起作用<代码>var代表={UN:“Ali”,LC:“Turkey”,AG:“29”},然后是
var str=“你好,我在LC,AG”
,最后是
str.replace(/\[(\w+)\]/g,函数(s,键){return reps[key]| s;})
返回初始字符串,没有任何替换。@maxagaz请检查OP的问题,
str
var str=“用户名:[UN]位置:[LC]年龄:[AG]”
。UN、LC和AG周围有括号。@KrzysztofSafjanowski应该是另一个括号,因为这一个比您的重复提案更旧