【发布时间】:2021-11-29 14:25:53
【问题描述】:
我有以下描述,我试图用签名的 s3 链接替换 href 道具中的链接在没有 DOM 的后端
所以,我需要先遍历所有匹配的 s3 链接并将其替换为已签名的链接。
问题是它也替换了其他部分。它不知道何时结束匹配。
这就是我想要做的,
- 收集所有链接
- 过滤具有 s3 相关关键字的链接
- 用签名的 s3 链接替换它们
function replaceNonSignedS3WithSignedLink(text) {
const urlRegex = /(https?:\/\/[^\s]+)/g;
return text.replace(urlRegex, function(url) {
return 'https://signed-s3-link.com';
})
// or alternatively
// return text.replace(urlRegex, '<a href="$1">$1</a>')
}
const desc = `<h3>Introduction Session</h3><p>Monday, March 3, 2021 11:00AM - 01:00PM</p>
Click <a href='https://example.s3.amazonaws.com/assets/bio.pdf'>here</a>`;
const result = replaceNonSignedS3WithSignedLink(desc);
console.log(result)
我得到的结果是,
"<h3>Introduction Session</h3><p>Monday, March 3, 2021 11:00AM - 01:00PM</p>
Click <a href='https://signed-s3-link.com"
【问题讨论】:
-
对 HTML 的正则表达式处理是一个bad approach。您不能通过选择
a标记来替换 DOM 中的链接,而不是在 HTML 代码中使用正则表达式替换它们吗?
标签: javascript regex