Javascript 用链接替换html中的单词,但如果搜索词发生冲突,则首选较长的单词

Javascript 用链接替换html中的单词,但如果搜索词发生冲突,则首选较长的单词,javascript,html,regex,Javascript,Html,Regex,我在以下任务中遇到问题: 我需要通过将包含的一些单词链接到“阅读更多”页面来丰富包含html的字符串。不幸的是,当我想要替换的搜索词开始重叠时,它就变得棘手了。 我要么以嵌套链接结束,要么像下面的例子一样,不再替换较长的术语 let html=`因此,在html中有包含单词的文本 我想把一些特殊的单词链接到他们的阅读更多页面 但是,如果搜索词相互包含,它们就没有正确链接。就像上面提到的那样。`; 常量链接到=[ {术语:'单词',链接:'https://example.com/words'},

我在以下任务中遇到问题:

我需要通过将包含的一些单词链接到“阅读更多”页面来丰富包含html的字符串。不幸的是,当我想要替换的搜索词开始重叠时,它就变得棘手了。 我要么以嵌套链接结束,要么像下面的例子一样,不再替换较长的术语

let html=`因此,在html中有包含单词的文本

我想把一些特殊的单词链接到他们的阅读更多页面

但是,如果搜索词相互包含,它们就没有正确链接。就像上面提到的那样。

`; 常量链接到=[ {术语:'单词',链接:'https://example.com/words'}, {术语:“特殊词语”,链接:'https://example.com/special_words'}, ]; for(链接到的常量对){ const re=new RegExp(pair.term,“g”); html=html.replace(re,``); } document.body.innerHTML=html
您可以使用
字符串.replace()
函数:

let html=`因此,在html中有包含单词的文本

我想把一些特殊的单词链接到他们的阅读更多页面

但是,如果搜索词相互包含,它们就没有正确链接。就像上面提到的那样。

`; 常量链接到=[ {术语:'单词',链接:'https://example.com/words'}, {术语:“特殊词语”,链接:'https://example.com/special_words'}, ]; for(链接到的常量对){ html=html.replace(pair.term,``); } document.body.innerHTML=html
您需要按长度降序排列键,并根据以下术语创建一个正则表达式:

let html=`因此,在html中有包含单词的文本

我想把一些特殊的单词链接到他们的阅读更多页面

但是,如果搜索词相互包含,它们就没有正确链接。就像上面提到的那样。

`; 常量链接到=[ {术语:'单词',链接:'https://example.com/words'}, {术语:“特殊词语”,链接:'https://example.com/special_words'}, ]; const keys=linkTo.map(x=>x.term).sort((a,b)=>b.length-a.length) const re=new RegExp(“\\b(?“+keys.join”(“|”)和“+”\\b”,“g”); html=html.replace(re,(m)=>`); document.body.innerHTML=html
您的问题需要澄清。(对我来说)很难理解你想要完成什么。@GetSet事实上这很清楚。@WiktorStribiżew我迷路了。不幸的是,这并不能取代这些词。我需要把这个词的每一次出现都替换掉。它只适用于意外情况下的示例代码。这似乎非常有效:)当我将其部署到设备时,在react native中创建RegExp()的行上会出现“SyntaxError:Invalid regular expression:Invalid group specifier name”。你知道那可能是什么吗?顺便说一句,我正在使用第二个版本来制作特殊角色。@janrop你在Safari中使用它吗?它不支持lookbehinds。我添加了一个片段,请检查。