这个想法取自here

我有以下代码:

myApp.filter('parseUrlFilter', function () {
var urlPattern = /^E\d{5}-\d{2}$/;
return function (text, target) {
    return text.replace(urlPattern, '<a target="' + target + '" href="http://somepage.com?number=$&">$&</a>') + " | ";
};
});


我仍在尝试理解此代码的工作原理,但它不会将文本转换为URL。

就像E12345-01不会成为somepage.com?number=E12345-01

我想我缺少有关正则表达式在这里如何工作的信息。任何帮助将不胜感激。

编辑:添加plnkr与machinehead115的一些工作答案

最佳答案

在没有看到您的HTML代码的情况下,我假设您实际上是在绑定/使用过滤器,如下所示:

<div ng-bind-html="'E12345-01' | parseUrlFilter:'_blank'"></div>


为了使过滤器实际将链接文本输出为代码,您需要包括$sce作为过滤器的依赖项,并使用$sce.trustAsHtml(link)返回链接:

angular.module('app', [])
  .filter('parseUrlFilter', function($sce) {
    var urlPattern = /^E\d{5}-\d{2}$/;
    return function(text, target) {
      return $sce.trustAsHtml(text.replace(urlPattern, '<a target="' + target + '" href="http://somepage.com?number=$&">$&</a>') + ' | ');
    };
  });


这是代码工作的示例plnk

关于javascript - 用网址替换模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40773573/

10-09 17:42