用URL替换模式

时间:2016-11-23 20:24:31

标签: javascript angularjs regex

这个想法取自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进行了一些有效的回答

4 个答案:

答案 0 :(得分:1)

在没有看到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

答案 1 :(得分:0)

我不确定我理解你的问题,也不了​​解你的背景。我的假设是你需要从incomingString中提取数字并使用该数字生成一个新的链接字符串。鉴于这些要求,下面的内容将帮助你......

//this var represents the string that would hold the identifier you're interested in
var originString = "blah blah blah E12345-01 more blah blah blah";
function DoIt(incomingString)
{
    //create a regex pattern
    var urlPattern = new RegExp(/E\d{5}-\d{2}/);
    //get the match
    var theMatch = urlPattern.exec(incomingString);
    //add the match to your new url
    var returnString = "www.whateversite.com/number=" + theMatch;
    //from here you can do whatever you want with that string
    //for now, I'll just return it as is...
    return returnString;
}
console.log(DoIt(originString));

答案 2 :(得分:-1)

这是适合您的正则表达式

([E]\d{5}-\d{2})

点击https://regex101.com/r/O6YFlj/1

答案 3 :(得分:-1)

问题不在于您的网址匹配和替换代码。我从您的代码中提取了以下内容并使用它。工作得很完美:

<script>
var urlPattern = /^E\d{5}-\d{2}$/;
var text = "E12345-01";
document.write(text.replace(urlPattern, '<a href="http://somepage.com?number=$&">$&</a>') + " | ");
</script>

问题必须与文本的价值有关。使用console.log(text)查看您是否在变量中获得正确的值。

相关问题