用文本中的降价链接替换特定单词

Replace specific words with markdown links in a text

我有一个文本保存在一个较长的字符串中,我想用突出显示的版本或降价替换文本中的一些词 link 到描述这些词的词汇表页面。应该过滤的词存储在一个字符串数组中。

目前我的代码看起来像这样:

const text = "Lorem ipsum xxx dolor sit amet."
const highlightedWords = ["xxx", "yyy"]

const newText = text.replace(new RegExp(highlightedWords.join("|"), "gi"), "[same-word-here]('/glossary#same-word-here)');

same-word-here的部分应该是之前替换的同一个词,但是我不知道怎么把这个放在这个位置

如果您需要一个更广为人知的示例:它应该看起来像维基百科文本中 linked 的文章

感谢您的帮助。

将表达式包裹在捕获组 () 中,然后使用 </code> 来使用捕获组的内容。您还应该使用 <code>\b(单词边界)来防止在其他作品中替换文本,例如“xxxzzz”。

const text = "Lorem ipsum xxx dolor sit amet."
const highlightedWords = ["xxx", "yyy"]

const newText = text.replace(new RegExp(`\b(${highlightedWords.join("|")})\b`, "gi"), "[]('/glossary#same-word-here)'");

console.log(newText)

如果我对你的目标的理解正确,你不需要正则表达式,因为你有一个单词数组可以遍历。

let text = 'Lorem ipsum xxx dolor sit yyy amet.';
const highlightedWords = ['xxx', 'yyy'];

for (word of highlightedWords) {
    if (text.includes(word))
        text = text.replace(word, `[${word}]('/glossary#${word})`);
}

console.log(newText);
// result: Lorem ipsum [xxx]('/glossary#xxx) dolor sit [yyy]('/glossary#yyy) amet.

或者使用一个新变量,以便在需要时仍然拥有原始变量

const text = 'Lorem ipsum xxx dolor sit yyy amet.';
const highlightedWords = ['xxx', 'yyy'];

let newText = text;
for (word of highlightedWords) {
    if (newText.includes(word))
        newText = newText.replace(word, `[${word}]('/glossary#${word})`);
}

console.log(newText);
// result: Lorem ipsum [xxx]('/glossary#xxx) dolor sit [yyy]('/glossary#yyy) amet.