如何用javascript中的值替换句子中的单词?

时间:2018-11-14 11:00:34

标签: javascript string typescript replace

我有以下Scenerio,其中有以下字符串

Edit:  const message = results.doc.data().taskSettings.taskInProgressSettings.pushNotifications.onAssignmentNotifyEmployee.message;

我从db获得消息,变量不一定是taskId , customerName。它可以是taskId , customerName , customerId, taskCreaterName , employeeName , employeeId。该消息可能包含上述任何变量,我需要在运行时用其值替换它们。

message:`Task ${taskId} assigned by ${taskCreaterName} for customer ${customerName}`
let taskId = T-100;
let taskCreaterName = 'mark';
let customerName = 'henry';

并且我想用其值替换变量(taskId,taskCreaterName,customername),最终结果应为以下内容,

newMessage = Task T-100 assigned by mark for customer henry

实现此目标的最佳方法是什么。谢谢

6 个答案:

答案 0 :(得分:1)

您可以将具有目标名称的值存储在对象中,并使用.replace()将字符串的目标部分替换为对象中的值。如果对象中存在具有匹配名称的值,则将其替换为值。

var message = 'Task ${taskId} assigned by ${taskCreaterName} for customer ${customerName} and ${newVar}';
var values = {
  taskId: 'T-100',
  taskCreaterName: 'mark',
  customerName: 'henry'
};
var newStr = message.replace(/\$\{(\w+)\}/g, function(match, cont){
  return typeof values[cont] !== 'undefined' ? values[cont] : match;
})
console.log(newStr);

答案 1 :(得分:1)

要以通用方式进行此工作,您可以保留1个对象(例如我在下面创建的“ withData”,而不是维护不同的变量)来存储要替换的值,并让通用函数(替换)处理所有如下所示的更改

let message = 'Task ${taskId} assigned by ${taskCreaterName} for customer ${customerName}'

let withData = {
  taskId: 'T-100'
  , taskCreaterName: 'mark'
  , customerName: 'henry'
}

function replace(obj, withData) {
  let result = message.slice(0)
  for (let [key, value] of Object.entries(withData)) {
    result = result.replace('${' + key + '}', value)
  }
  
  return result
}

let result = replace(message, withData)

console.log(result)

// In case Object.entries is not supported
function replace(obj, withData) {
  let result = message.slice(0)
  for (let key in withData) {
    let value = withData[key]
    result = result.replace('${' + key + '}', value)
  }
  
  return result
}

答案 2 :(得分:0)

您无需执行任何操作。 Js将在运行时将变量替换为value。

答案 3 :(得分:0)

这可能是完成您正在寻找的事情的最简单方法:

let taskId = 'T-100';
let taskCreaterName = 'mark';
let customerName = 'henry';

let newMessage = 'Task ' + taskId + ' assigned by ' + taskCreaterName + ' for customer ' + customerName;

newMessage的位置为“任务T-100由标记分配给客户,这是对客户的要求”。

答案 4 :(得分:0)

根据您代码中未提供的T的值,我将假定它具有有效的整数。

let T = parseInt(Math.random() * 1000);

let taskId = T-100;
let taskCreaterName = 'mark';
let customerName = 'henry';

//assuming T-100 is a result of an expression, you would do something like:
console.log(`Task ${taskId} assigned by ${taskCreaterName} for customer ${customerName}`);

//assming T-100 is a litral string, then you don't need to parse it at all
console.log(`Task T-100 assigned by ${taskCreaterName} for customer ${customerName}`);

答案 5 :(得分:0)

您可以将String#replace用于自定义回调和evalname仅包含字符[a-zA-z0-9],因此应该是安全的)

var message = 'Task ${taskId} assigned by ${taskCreaterName} for customer ${customerName}';
let taskId = 'T-100';
let taskCreaterName = 'mark';
let customerName = 'henry';

var newMessage = message.replace(/\${([\w]+)}/g, function(match, name){
  return eval(name);
})

console.log(newMessage);