regex 如何用正则表达式将带有标签javascript字符串 Package 在另一个标签中?

inkz8wg9  于 2022-12-14  发布在  Java
关注(0)|答案(2)|浏览(115)

我有带链接的字符串

<a href="https://twitter.com/" target="_blank" rel="noopener noreferrer">Twitter/</a>

和我需要 Package 文本链接在喜欢

<a href="https://twitter.com/" target="_blank" rel="noopener noreferrer"><span style="color: white">Twitter</span>/</a>

那么我需要什么正则表达式呢?ps.我需要通过nodejs从mongodb将这个字符串作为html邮件一部分发送,而不是用于操作DOM

xoefb8l8

xoefb8l81#

最安全的做法是使用带有node.js的DOMParser,正如“第四只鸟”所提到的:Trying to use the DOMParser with node js
你可以使用一个正则表达式,它可能不会涵盖所有的极端情况。

const input = '<a href="https://twitter.com/" target="_blank" rel="noopener noreferrer">Twitter/</a>';

let regex1 = /(<a [^>]*>)(.*?)(<\/a>)/gi;
let result1 = input.replace(regex1, '$1<span style="color: white">$2</span>$3');
console.log('result1:', result1);

let regex2 = /(?<=<a [^>]*>)(.*?)(?=<\/a>)/gi;
let result2 = input.replace(regex2, '<span style="color: white">$1</span>');
console.log('result2:', result2);

输出量:

result1: <a href="https://twitter.com/" target="_blank" rel="noopener noreferrer"><span style="color: white">Twitter/</span></a>
result2: <a href="https://twitter.com/" target="_blank" rel="noopener noreferrer"><span style="color: white">Twitter/</span></a>

正则表达式1的解释:

  • (<a [^>]*>)-捕获组1:锚标记
  • (.*?)-捕获组2:非贪婪扫描
  • (<\/a>)-捕获组3:锚端标签
  • 在替换部件中使用捕获组$1$2$3

正则表达式2的解释:

  • 类似于regex 1,但使用正lookbehind而不是捕获组1,并使用正lookahead而不是捕获组2(并非所有JavaScript引擎都支持此功能)

相关问题