如何从句子中获取网址?

时间:2013-01-23 17:21:16

标签: regex preg-replace

如何进行替换,将段落中的所有普通地址转换为链接?

问题是句点在地址中有效,但地址可能在句子的末尾。

测试字符串:

The link is: http://www.google.com/pants.  And that is the link.  

我需要从http分组到裤子。 (这是纯文本,我需要将其设为html。)

这个正则表达式抓住裤子之后的时期,所以很糟糕:

(^|[\n ])([\w]+?://[^\s]*)

我很确定我需要做一个前瞻,但我不能把它放在^ \ s字符集中。试图做一个ifthenelse也没有我。

这是我的输出内容:

$1<a href=\"$2\" target=\"_blank\">$2</a>

嘿,读这篇文章的人。确保您知道此网站:http://gskinner.com/RegExr/它规则。这是我正确使用正则表达式的唯一原因。

2 个答案:

答案 0 :(得分:1)

假设网址中没有空格,后面跟着字符串的空格或结尾:

str = str.replace(
    /(https?:\/\/\S+?)(?=\.?(\s|$))/g,
        '<a href="$1" target="_blank">$1</a>' );

它会尽可能少地捕获'http [s]://'和非空格字符,直到向前看可选.,然后是空格或字符串结尾。

如果您要排除可能位于网址末尾的其他标点符号,您可以相应地更改正面预测,例如(?=[;:!,.]?(?:\s|$))

请注意,上述正则表达式并非仅与有效网址匹配,您可能希望将\S替换为[\w/.-],以仅匹配包含字词字符的网址和.-/

In search of the perfect URL validation regex

答案 1 :(得分:0)

这些用于网址正则表达式模式的模式:

^http\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(/\S*)?$

^[a-zA-Z0-9\-\.]+\.(com|org|net|mil|edu|COM|ORG|NET|MIL|EDU)$

你可以像这样使用它们

str = str.replace(PATTERN/g,
        '<a href="$1" target="_blank">$1</a>' );

你会在http://regexlib.com/

找到大量的