如何在字符串中的特定位置插入变量

How an I insert variables at a specific place in a string?

本文关键字:定位 位置 插入 变量 字符串      更新时间:2024-03-30

获取"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解释:

  1. '{:匹配{括号文字
  2. ([^}]*):匹配除}以外的任何内容零次或多次,并将其添加到第一个捕获的组中
  3. '}:匹配}括号文字
  4. 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; })