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 – 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], "" + 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(
    function(match, space, url){
      var hyperlink = url;
      if (!hyperlink.match('^https?:\/\/')) {
        hyperlink = 'http://' + hyperlink;
      return space + '' + url + '';

RegEx to Extract Video ID from YouTube URLs

The regular expression will extract the video ID from any YouTube URL and it works with shortened URLs ( and embed URLs ( as well.

function extractVideoID(url){
    var regExp = /^.*((\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
    var match = url.match(regExp);
    if ( match && match[7].length == 11 ){
        return match[7];
        alert("Could not extract video ID.");

Another alternative that will extract the video ID as well as the playlist ID from YouTube URLS:

    var id = url.match("v=([a-zA-Z0-9\_\-]+)&?")[1];
    var list = url.match("list=([a-zA-Z0-9\-\_]+)&?");
    list = list ? list[1] : "";