在替换功能中访问第一个正则表达式匹配组

时间:2018-09-25 12:41:27

标签: javascript regex

这可能很容易,但是由于树木,我只是看不到森林。给出以下功能:

const urlify = text => {   
    let urlRegex = /(https?:\/\/[^\s]+)(<\/td>)/g;      
    return text.replace(urlRegex, function(text) {
            return '<a href="' + text + '">' + text + '</a>';
        })
    	}
      
    alert(urlify('<td>http://test.com</td>'))

或多或少像this SO answer中的函数。

regex replace()函数当前获取整个匹配项。因此,该链接包含结束</td>。我将如何访问函数内的第一个捕获组urlRegex.exec(text)[1]

1 个答案:

答案 0 :(得分:1)

捕获组作为第一个参数之后的附加参数传递给您的函数:

const urlify = text => {
  let urlRegex = /(https?:\/\/[^\s]+)(<\/td>)/g;
  return text.replace(urlRegex, function(_, text) 
// Ignoring the first argument ----------^^
    return '<a href="' + text + '">' + text + '</a>';
  })
}

console.log(urlify('<td>http://test.com</td>'))

但是您不需要此功能,可以在替换字符串中使用令牌:

const urlify = text => {
  let urlRegex = /(https?:\/\/[^\s]+)(<\/td>)/g;
  return text.replace(urlRegex, '<a href="$1">$1</a>');
}

console.log(urlify('<td>http://test.com</td>'))

更多on MDN