2016-11-23 96 views
1

的想法是从here替换URL模式

采取我有以下代码:

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

回答

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

+0

这正是我一直在寻找的。两个问题: 1)sce如何工作?我只是无法弄清楚为什么在这里需要$ sce。 2)这在我的代码现在不起作用。给出一个'parseUrlFilterFilterProvider'错误。我维护一个app.js,在其中编写公共服务/指令和一个controller.js。 I D.I.'这在我的控制器中,但这给了另一个类似的错误。任何想法我如何处理这个? –

+0

做了一个样本[plnk](http://plnkr.co/edit/uhq2d2LQQ3LAqX2fCQrl?p=preview) –

+0

在这里,我更新了[plnk](http://plnkr.co/edit/GuKyCrnERzgMUX2vqGJ8?p=preview)为你。您不需要将过滤器包装在'document.ready()'中。看看我上面的答案中的$ sce链接,但基本信息是 _SCE协助编写代码的方式是(a)默认安全,(b)审核安全漏洞,如XSS,点击劫持,等等,很容易。 – machinehead115

-1

这里有些工作答案是工作正则表达式,你

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

这里检查https://regex101.com/r/O6YFlj/1

+0

这并不真正帮助他的正则表达式,它使它更通用,它并没有做任何事情,实际上使链接出现在页面上。 – machinehead115

-1

的问题是不是在你的URL匹配替换代码。我从你的代码中提取以下内容并使用它。工作完美:

<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)来查看您是否在变量中获得了正确的值。

+0

是的,这是有效的,但是这完全否定了Angular中'$ filter'的使用。 – machinehead115

+0

虽然在他的情况下,我认为'text!=“E12345-01”' –

+0

@machineh显然这段代码是为了表明URL匹配的部分工作正常。 – owaisafaq

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));