我用黑盒逻辑创建了一个应用程序。我有一个基于此的配置和页面构建。 我为所有页面使用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.
答案 0 :(得分:0)
'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]);