Javascript 使用string.replace应用字符串数组

Javascript 使用string.replace应用字符串数组,javascript,arrays,string,ecmascript-6,Javascript,Arrays,String,Ecmascript 6,假设我有这样一个字符串: const sentence = "This is my custom string"; 我想突出显示这个句子中输入字段的单词 假设一个用户输入了一个字符串,我将这些单独的单词转换成如下数组: ["custom", "string", "is"] 我知道我想用数组中突出显示的单词替换句子中的单词。就一个词而言,我会这样做: const word = 'custom'; const searchFor = new RegExp(`(${word})`, 'gi');

假设我有这样一个字符串:

const sentence = "This is my custom string";
我想突出显示这个句子中输入字段的单词

假设一个用户输入了一个字符串,我将这些单独的单词转换成如下数组:

["custom", "string", "is"]
我知道我想用数组中突出显示的单词替换句子中的单词。就一个词而言,我会这样做:

const word = 'custom';

const searchFor = new RegExp(`(${word})`, 'gi');
const replaceWith = '<strong class="highlight">$1</strong>';

const highlightedSentence = sentence.replace(searchFor, replaceWith);
我会突出我的重点课程,从而突出《盗梦空间》

关于我的意思示例,请尝试注释/取消注释2个高亮功能:


您的问题是,在替换单词时,您将已添加的html标记替换为.class“highlight”

这里的解决方案可能是替换任何不是html标记的内容。在JSFIDLE示例中替换这一行

const searchFor = new RegExp(`(${word})(?!([^<]+)?>)`, 'gi');
const searchFor=newregexp(`(${word})(?!([^)`,'gi');

您的问题是,在替换单词时,您将已添加的html标记替换为.class“highlight”

这里的解决方案可能是替换非html标记的任何内容

const searchFor = new RegExp(`(${word})(?!([^<]+)?>)`, 'gi');
const searchFor=newregexp(`(${word})(?!([^)`,'gi');

您可以将句子拆分为数组,并检查元素是否已高亮显示:

let-sense=“这是一种长字符串类型,包含各种各样的单词。”;
让sentenceArr=句子.split(“”);//生成一个数组
const query=“分类所有类型的单词”;
功能荧光灯(查询、句子){
const words=query.match(/\S+/g);
words.forEach((word)=>{
//创建捕获组,因为我们搜索不区分大小写。
const searchFor=newregexp(`(${word})`,'gi');
常量replaceWith='$1;
sentencerr=sentencerr.map(sw=>(sw.indexOf('strong class=“highlight”'))===-1)?sw.replace(searchFor,replacetwith):sw);//如果已经是高位-跳过
//句子=句子.替换(搜索,替换为);
});
//控制台日志(句子);
document.querySelector('.highlighted句子')。innerHTML=sentencerr.join('');//注意sentencerr
}
//工作。
//荧光笔('各种类型的单词',句子);
//不起作用。
highlighter(‘种类词高’,句子);

您可以将句子拆分为数组,并检查元素是否已高亮显示:

let-sense=“这是一种长字符串类型,包含各种各样的单词。”;
让sentenceArr=句子.split(“”);//生成一个数组
const query=“分类所有类型的单词”;
功能荧光灯(查询、句子){
const words=query.match(/\S+/g);
words.forEach((word)=>{
//创建捕获组,因为我们搜索不区分大小写。
const searchFor=newregexp(`(${word})`,'gi');
常量replaceWith='$1;
sentencerr=sentencerr.map(sw=>(sw.indexOf('strong class=“highlight”'))===-1)?sw.replace(searchFor,replacetwith):sw);//如果已经是高位-跳过
//句子=句子.替换(搜索,替换为);
});
//控制台日志(句子);
document.querySelector('.highlighted句子')。innerHTML=sentencerr.join('');//注意sentencerr
}
//工作。
//荧光笔('各种类型的单词',句子);
//不起作用。
highlighter(‘种类词高’,句子);

谢谢,我从来都不知道用正则表达式可以实现这样的效果。是时候深入了解正则表达式了。效果很好。谢谢,我从来都不知道用正则表达式可以实现这样的效果。是时候深入了解正则表达式了。效果很好。