2014-01-09 48 views
0

我的文字是:有特殊字符的Javascript匹配的网址格式允许

<A HREF="http://ad.doubleclick.net/get/N97638.2534621.INTERSTITIAL/B7532631099.4;sz=1x1;ord=[timestamp]?"> 

我使用正则表达式如下匹配网址:

var uri_pattern = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/ig 

这工作得很好,希望它不会赶上字符如[]?。我试图操纵正则表达式来包含特殊字符,但它似乎没有工作。

例如:

var text = '<A HREF="http://ad.doubleclick.net/get/N97638.2534621.INTERSTITIAL/B7532631099.4;sz=1x1;ord=[timemacro]?">'; 
console.log(text.match(uri_pattern)); 

//OUTPUT 
"http://ad.doubleclick.net/get/N97638.2534621.INTERSTITIAL/B7532631099.4;sz=1x1;ord=[timemacro" 

而我想:

"http://ad.doubleclick.net/get/N97638.2534621.INTERSTITIAL/B7532631099.4;sz=1x1;ord=[timemacro]?" 
+0

这可能会做:'/的 techfoobar

+0

@techfoobar URL可能并不总是包含在锚标记内 – jerrymouse

+0

Ahh ..所以你想抓到url pa tterns,而不仅仅是href属性值..好的。 – techfoobar

回答

1

您可以使用下面的代码:

var uri_pattern = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[{};:'".,<>?«»“”‘’]|\]|\?))/ig 

var text = '<A HREF="http://ad.doubleclick.net/get/N97638.2534621.INTERSTITIAL/B7532631099.4;sz=1x1;ord=[timemacro]?">'; 

console.log(text.match(uri_pattern)); 
+0

作品!我看到你删除了'\]'并添加了| | \] | \?'。你能简单地解释一下吗? – jerrymouse

+1

是的。 [和?在正则表达式中有特殊的含义。如果你想让这些角色脱离他们的行动,你必须使用转义字符,即\。并且[]内部不使用\]或\ b,它会得到其他含义。有关更多详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions –

相关问题