使用AngularJS替换字符串中的特定字符

时间:2017-04-25 09:23:22

标签: angularjs string

我用黑盒逻辑创建了一个应用程序。我有一个基于此的配置和页面构建。 我为所有页面使用Angular组件,并为某些操作确认弹出消息。

从外面我想要这个结构用于确认消息 像这样

'Are you sure you want to revoke license for #:SiteName# ?'

在我的组件中我有一个

$scope.dataItem = { SiteName: 'stackOverflow', Id: 1}

当我从外面打电话给showConfirmation('Are you sure you want to revoke license for #:SiteName# ?')时 我希望在内部逻辑中剪切和编辑此字符串,以便我显示的消息将是'Are you sure you want to revoke license for stackOverflow ?' 或者像programmaticaly一样

'Are you sure you want to revoke license for ' + $scope.dataItem.SiteName + ' ?'

基本上我想要的是剪切这个字符串,编辑它并在任何地方改变

#: property # to replace with actually value of $scope.dataItem.property.

2 个答案:

答案 0 :(得分:0)

使用String.prototype.replace()

'Are you sure you want to revoke license for #:SiteName# ?'.replace(/\#\:SiteName\#/, $scope.dataitem.SiteName);

修改

更可重复使用的代码:

function replaceSomething(originalString, variableName) {
    var regexPattern = "\#\:" + variableName + "\#";
    var regex = new RegExp(regexPattern, "g");
    return originalString.replace(regex, $scope.dataItem[variableName]);
}

现在你使用它:

replaceSomething('Are you sure you want to revoke license for #:SiteName# ?', "SiteName");

行动中JSFiddle

可以找到关于正则表达式的许多有用信息here

<强> EDIT2:

这是另一种可能更接近你所问的可能性:

function replaceSomething(originalString) {
  var regexPattern = "\#\:(.+)\#";
  var regex = new RegExp(regexPattern, "g");
  var variableName = regex.exec(originalString)[1];
  return originalString.replace(regex, $scope.dataItem[variableName]);
}

答案 1 :(得分:0)

嗯,这很容易,

args.confirmation.Message = 'Are you sure you want to revoke license for #:SiteName# ?'

var property = args.confirmation.Message.substring(args.confirmation.Message.lastIndexOf("#:") + 2, args.confirmation.Message.lastIndexOf("#"));

var message = args.confirmation.Message.replace('\#\:' + property + '\#', data[property]);