【问题标题】:Javascript - Make specific text a link [duplicate]Javascript - 使特定文本成为链接[重复]
【发布时间】:2018-11-13 12:14:28
【问题描述】:

我正在研究一个使用 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}) 但我不确定如何在函数中实现它。

谢谢

【问题讨论】:

    标签: javascript regex function


    【解决方案1】:

    在我看来,模式和替换字符串可以简化一点。

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

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

    【讨论】:

    • 感谢您的帮助:)
    • @Rocket,谢谢。新版本在没有协议的www.之前额外添加了http协议。
    猜你喜欢
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 2012-05-20
    • 2021-03-18
    • 2013-08-25
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    相关资源
    最近更新 更多