AngularJS,如何在正则表达式

时间:2017-01-08 13:26:49

标签: angularjs regex

在我的项目中,用户可以输入一个字符串,然后在视图中将其翻译为按钮。

这是一个例子,我希望发生什么:

用户输入: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中使用捕获组的正确方法是什么?我将如何引用它们?

1 个答案:

答案 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>'
    }));
};