首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用javascript将rel="nofollow“添加到与我的域名无关的所有外部链接?

如何使用javascript将rel="nofollow“添加到与我的域名无关的所有外部链接?
EN

Stack Overflow用户
提问于 2016-06-16 21:36:51
回答 2查看 1.7K关注 0票数 1

我有以下三个链接的html字符串:

代码语言:javascript
复制
var html = '
   <a href="http://www.example.com/help">Go to help page</a>
   <a href="http://blog.example.com">Go to blog page</a>
   <a href="https://google.com">Go google</a>
';

我的域名是example.com。从上面的代码中可以看到,有两个内部链接和一个外部链接。

我需要写“魔术”函数,添加rel="nofollow"属性到所有外部链接(不是内部链接)。所以我需要得到以下结果:

代码语言:javascript
复制
var html = '
   <a href="http://www.example.com/help">Go to help page</a>
   <a href="http://blog.example.com">Go to blog page</a>
   <a href="https://google.com" rel="nofollow">Go google</a>
';

我正在试着写那个函数,这就是我当时的想法:

代码语言:javascript
复制
function addNoFollowsToExternal(html) {
  // List of allowed domains
  var whiteList = ['example.com', 'blog.example.com'];

  // Regular expression
  var str = '(<a\s*(?!.*\brel=)[^>]*)(href="/https?://)((?!(?:(?:www\.)?' + whiteList.join(',') + '))[^"]+)"((?!.*\brel=)[^>]*)(?:[^>]*)>',

  // execute regexp and return result
  return html.replace(new RegExp(str, 'igm'), '$1$2$3"$4 rel="nofollow">');
}

不幸的是,我的regexp似乎不起作用。执行addNoFollowsToExternal(html) rel="nofollow"后,不要添加到带有href="https://google.com"的外部链接

请帮助我修复我的正则表达式来解决我的任务。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-16 23:27:13

您的RegEx中有一些小错误。以下是更正后的版本:

代码语言:javascript
复制
function addNoFollowsToExternal(html){
    var whiteList = ['([^/]+\.)?example.com'];
    var str = '(<a\s*(?!.*\brel=)[^>]*)(href="https?://)((?!(?:' + whiteList.join('|') + '))[^"]+)"((?!.*\brel=)[^>]*)(?:[^>]*)>';

    return html.replace(new RegExp(str, 'igm'), '$1$2$3"$4 rel="nofollow">');
}
票数 6
EN

Stack Overflow用户

发布于 2018-07-08 05:33:41

你也可以使用下面的函数

代码语言:javascript
复制
private function _txt2link($text){

         $regex = '/'
          . '(?<!\S)'
          . '(((ftp|https?)?:?)\/\/|www\.)'
          . '(\S+?)'
          . '(?=$|\s|[,]|\.\W|\.$)'
          . '/m';

        return preg_replace_callback($regex, function($match)
        {
            return '<a'
              . ' target="_blank"'
              . ' rel="nofollow"'
              . ' href="' . $match[0] . '">'
              . $match[0]
              . '</a><br/>';
        }, $text);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37860926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档