0

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

问题是句号在地址中有效,但地址可能在句末。

测试字符串:

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/它规则。这是我正确使用任何正则表达式的唯一原因。

4

2 回答 2

1

假设 url 中没有空格,后面有空格或字符串结尾:

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

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

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

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

寻找完美的 URL 验证正则表达式

于 2013-01-23T17:31:15.587 回答
0

这些 urls 正则表达式模式的一些模式:

^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/找到很多

于 2013-01-23T17:45:49.147 回答