我是正则表达式的新手,我已经花了几个小时来解决这个问题

let text = "My twitter handle is @emmy, I follow @jo and @pe"


我需要用<a href="https://twitter.com/emmy">@emmy</a>替换@emmy,同样,字符串中其他以@开头的其他字符串。

这是我通过搜索互联网并阅读docs on MDN想到的

function linkify(text) {
  let regex = /(?:^|\W)@(\w+)(?!\w)/g;
  return text.replace(regex, function(handle) {
    return `<a href="https://twitter.com/${handle.slice(1)}>${handle}</a>`;
})
}


这种解决方案的问题在于有时它会省略一些文本,例如,本周早些时候,@ emmy推荐了最好的学生,并致力于本周初,

任何对解决方案的投入将不胜感激。

最佳答案

我不认为您需要针对此问题的回调,直接替换应该可以工作:



let text = "My twitter handle is @emmy, I follow @jo and @pe";
console.log(text.replace(/(^|\W)@(\w+)\b/g, '$1<a href="https://twitter.com/$2">@$2</a>'));

关于javascript - 使用正则表达式以@开头替换子字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53566267/

10-09 08:37