/* global hexo */ 'use strict' hexo.extend.filter.register('after_post_render', function (data) { const config = this.config; const url = new URL(config.url); const siteHost = url.hostname || config.url; // Match 'a' tags that don't contain html children. const regPureATag = /]*)href="([^"]*)"([^>]*)>([^<]*)<\/a>/gim data.content = data.content.replace(regPureATag, function ( match, attrBegin, href, attrEnd, html ) { // Exit if the href attribute doesn't exists. if (!href) return match; let link = ''; try { link = new URL(href); } catch (e) { // Invalid url, e.g. Anchor link. return match; } // Exit if the url has same host with `config.url`, which means isn't an external link. if (!link.protocol || link.hostname === siteHost) return match; return ( `${html}` ) }) }, 0 )