如何在字符串中的特定位置插入变量
How an I insert variables at a specific place in a string?
获取"template"字符串并将信息插入其中的最佳方法是什么?
例如:
var templateString = "Hello {name1}, my name is {name2}";
var name1 = "Phil";
var name2 = "Amy";
是否有一个简单的名称来插入用大括号括起来的变量名所在的值?我需要这不仅适用于这个例子(所以通过固定索引进行操作不是一个选项),而且适用于任何给定的模板字符串和任何给定数量的变量。
您可以使用ES2015模板文字。但是,在使用变量之前,应该先定义变量。
var name1 = "Phil";
var name2 = "Amy";
var templateString = `Hello ${name1}, my name is ${name2}`;
console.log(templateString);
document.body.innerHTML = templateString;
对于ES2015之前的版本,可以使用regex来替换变量。为此,可以创建具有搜索替换值的对象,并且可以使用具有函数作为参数的String#replace
。
正则表达式'{([^}]*)'}
可用于匹配由花括号包围的字符串。
// Create an object of the key-value of search-replace
var obj = {
name1: "Phil",
name2: "Amy"
};
var templateString = "Hello {name1}, my name is {name2}";
// Use replace with callback function
var result = templateString.replace(/'{([^}]*)'}/g, function($0, $1) {
return obj[$1] || $0; // If replacement found in object use that, else keep the string as it is
});
console.log(result);
document.body.innerHTML = result;
RegEx解释:
'{
:匹配{
括号文字([^}]*)
:匹配除}
以外的任何内容零次或多次,并将其添加到第一个捕获的组中'}
:匹配}
括号文字g
:全局标志。匹配遵循此模式的所有可能字符串
注意:$0
是完整的字符串,即{foo}
和$1
是第一个捕获的组foo
。
您可以使用javascript函数替换:http://www.w3schools.com/jsref/jsref_replace.asp
所以你的代码是:
var templateString = "Hello {name1}, my name is {name2}";
var name1 = "Phil";
var name2 = "Amy";
templateString = templateString.replace('{name1}', name1);
templateString = templateString.replace('{name2}', name2);
如果这不起作用,请告诉我。
ES6有字符串插值,你可以像这个一样做
var name1 = "Phil";
var name2 = "Amy";
var templateString = `Hello ${name1}, my name is ${name2}`;
document.write(templateString);
在ES5中,您可以使用String.replace:
var templateString = "Hello {name1}, my name is {name2}";
var name1 = "Phil";
var name2 = "Amy";
templateString.replace(/'{([^}]*)'}/g, function (m, v) { return eval(v) || m; })
请注意,不建议使用eval。如果你在一个对象中设置名称,你可以这样做:
var templateString = "Hello {name1}, my name is {name2}";
var names = {};
names.name1 = "Phil";
names.name2 = "Amy";
templateString.replace(/'{([^}]*)'}/g, function (m, v) { return names[v] || m; })
相关文章:
- 在地图加载/页面加载时,我想将地图设置为当前地理位置,但不想在地图上显示定位图标
- JQuery定位:我可以滚动到正确的位置一次,但不能滚动两次
- 如何在jquerymobile中同时放置两个定位的经纬度位置
- Javascript / 根据一个元素的位置定位另一个元素
- 如何定位“隐藏”的 iframe?(应用程序:链接到嵌入“隐藏的海报图像”嵌入的 Youtube 视频的起始位置)
- 与位置的相对定位:绝对
- 在没有“位置”属性的情况下实现绝对定位,使用边距/填充
- 用于相对于用户在约束内单击的位置定位框的数学公式
- 运行地理位置定位的 js 文件
- 如果定位服务关闭,英特尔 XDK 地理位置将找不到纬度/经度
- 在 iPad 上绝对定位不会将元素设置在所需位置
- 如何使用 jQuery 计算相对定位元素的绝对位置*没有*
- 如果php返回位置头,我如何在jquery ajax中定位页面
- 试着根据父母的位置来定位孩子
- 地理定位api没有给出准确的用户位置
- 定位父元素,使子元素处于完全相同的位置
- 如何在Javascript/Mootools中根据页面上不同对象的位置定位箭头
- 使用javascript查找元素相对于最近相对定位的父元素的位置
- 多个谷歌位置请求功能(药房定位器)
- 点击html5地理定位当前位置,然后减去两点