Extract and Replace Links in HTML with JavaScript RegEx

For the Mail Merge project, I need to extract all the hyperlinks in the email message and append email tracking parameters to each of the links. The links can be either embedded in the HTML <a> tag or they can be mentioned in plain text like example.com – Gmail and other email clients are smart enough to replace such plain text website links into clickable hyperlinks.

I’m using RegEx to pull out these links from HTML / Text and then a simple JavaScript function to manipulate the link.

Replace Links inside HTML Tags

function updateLinksInHTML(html) {
    
  var regex = /href\s*=\s*(['"])(https?:\/\/.+?)\1/ig;   
  var link;
  
  while((link = regex.exec(html)) !== null) {
    html = html.replace(link[2], "https://ctrlq.org?redirect_to" + encodeURIComponent(link[2]));
  }
  
  return html;
  
}

Convert Plain Text into Links

Some text make contain links in plain text and this method would replace such links into clickable hyperlinks by adding the anchor tag.

function createTextLinks_(text) {
  
  return (text || "").replace(
    /([^\S]|^)(((https?\:\/\/)|(www\.))(\S+))/gi,
    function(match, space, url){
      var hyperlink = url;
      if (!hyperlink.match('^https?:\/\/')) {
        hyperlink = 'http://' + hyperlink;
      }
      return space + '<a href="' + hyperlink + '">' + url + '</a>';
    }
  );
  
};