在我的项目中,用户可以输入一个字符串,然后在视图中将其翻译为按钮。
这是一个例子,我希望发生什么:
用户输入:argumentation-link_to(80)
在视图中,它应如下所示:
<button ng-click="goToArgumentation(80)"
class="btn btn-xs btn-info"> a link
</button>
这是我现在的代码:
$scope.buttonmaker = function(haystack) {
needle = /argumentation-link_to\(\d+\)/i; // <-- Regex
haystack = $sanitize(haystack);
return $sce.trustAsHtml(haystack.replace(new RegExp(needle, "gi"), function(match) {
console.log(match);
return '<button ng-click="goToArgumentation(' + match[0] + ')" class="btn btn-xs btn-info"> a link </button>'
}));
};
目前,argumentation-link_to(80)
会产生这个:
<button ng-click="goToArgumentation(a)"
class="btn btn-xs btn-info"> a link
</button>
我需要在80
中获取argumentation-link_to(80)
以填写goToArgumentation()
值得庆幸的是,Regex为我们提供了使用捕获组在Regex中检索数据的选项。但是,当我尝试使用它们时,我得到错误,正则表达式无效。 Using this site,我试过了:
/argumentation-link_to\((?<id>\d+)\)/i
/argumentation-link_to\((?'id'\d+)\)/i
这里我尝试了一个,没有发生错误,但我无法得到值:
/argumentation-link_to\((?:\d+)\)/i
在角度js中使用捕获组的正确方法是什么?我将如何引用它们?
答案 0 :(得分:1)
要使用捕获组,请使用()和RegExp的exec()函数:
$scope.buttonmaker = function(haystack) {
needle = /argumentation-link_to\((\d+)\)/i; // <-- Regex
haystack = $sanitize(haystack);
return $sce.trustAsHtml(haystack.replace(new RegExp(needle, "gi"), function(match) {
console.log(match);
return '<button ng-click="goToArgumentation(' + needle.exec(match)[1] + ')" class="btn btn-xs btn-info"> a link </button>'
}));
};