Javascript - 使特定文本成为链接

时间:2018-06-04 07:57:39

标签: javascript regex function

我正在寻找一个'做'列出使用JavaScript的应用程序。 当存在https,https或ftp时,其中一个函数会将文本转换为超链接。

如果我的文字包含#后跟任意5位数字,我想扩展它,这也成为一个链接。该网址应为http://192.168.0.1/localsite/testschool/search.php?id=ID

其中ID是#和5位数字。

这是当前的Javascript:

function prepareHtml(s)
{
    // make URLs clickable
    s = s.replace(/(^|\s|>)(www\.([\w\#$%&~\/.\-\+;:=,\?\[\]@]+?))(,|\.|:|)?(?=\s|&quot;|&lt;|&gt;|\"|<|>|$)/gi, '$1<a href="http://$2" target="_blank">$2</a>$4');
    return s.replace(/(^|\s|>)((?:http|https|ftp):\/\/([\w\#$%&~\/.\-\+;:=,\?\[\]@]+?))(,|\.|:|)?(?=\s|&quot;|&lt;|&gt;|\"|<|>|$)/ig, '$1<a href="$2" target="_blank">$2</a>$4');
};

使用prepareHtml(item.title)

进行调用

知道我怎么能这样做吗? 我已经计算出正则表达式以匹配#和5位是^#([0-9]{5}),但我不确定如何在函数中实现它。

由于

1 个答案:

答案 0 :(得分:1)

在我看来,模式&amp;替换字符串可以简化一下。

&#13;
&#13;
function urls2links(s)
{
    
return s.replace(/(^|[\s>])(www\.)/gi, '$1http://$2')
        .replace(/\b(((https?|ftps?):\/{2})(\S+?))(?=&quot;|&lt;|&gt;|[\s<>\"]|$)/ig, '<a href="$1" target="_blank">$1</a>');
};

var str = 'blah http://192.168.0.1/localsite/testschool/search.php?id=#12345 \nblah www.foo.com/bar/&quot; blah';

console.log('--\n-- BEFORE\n--');
console.log(str);
console.log('--\n-- AFTER\n--');
console.log(urls2links(str));
&#13;
&#13;
&#13;

虽然我不太确定需要在前瞻中包含字符实体|&quot;|&lt;|&gt;
但我猜测你也处理编码的字符串。