Javascript 如何从文本数组中替换句子中的多个单词?
我有一个句子和一系列文本Javascript 如何从文本数组中替换句子中的多个单词?,javascript,Javascript,我有一个句子和一系列文本 sentence = 'Hi I am fine. how are you' arrayOfTexts = ['Hi','I am','how','how are','how are you'] replacedText = '** * ** fine. *** *** ***' 所以我想在这里做的是,比较与文本值数组匹配的句子单词,并用星号“*”替换它们 条件: 当多个单词匹配而不是单个单词时,替换单词的第一个首选项更高。Exp:how are you替换为how
sentence = 'Hi I am fine. how are you'
arrayOfTexts = ['Hi','I am','how','how are','how are you']
replacedText = '** * ** fine. *** *** ***'
所以我想在这里做的是,比较与文本值数组匹配的句子单词,并用星号“*”替换它们
条件:
how are you
替换为how are you
不是how
也不是how are
。你可以先考虑更高的克数sentenceArray = ['Hi I am fine', 'I am fine .', 'am fine . how', 'fine . how are', '. how are you','Hi I am', 'I am fine', 'am fine .', 'fine . how', '. how are', 'how are you','Hi I', 'I am', 'am fine', 'fine .', '. how', 'how are', 'are you','Hi', 'I', 'am', 'fine', '.', 'how', 'are', 'you']
我的问题
有没有更好的办法来解决这个问题 您可以按字符串长度对
arrayOfTexts
进行排序(将最长的放在第一位),然后将其转换为正则表达式,在每个可能的字符串之间交替,并执行全局替换:
const句子='你好,我很好。你好吗;
const arrayOfTexts=['Hi'、'I am'、'how'、'how are'、'how are'、'you']
.排序((a,b)=>b.length-a.length);
const pattern=new RegExp(arrayOfTexts.join(“|”),“g”);
console.log(句子.replace(模式'FOO'))代码>似乎是正则表达式的一个例子。我很难确定您要用什么替换文本?根据单词长度对文本数组排序,并开始从索引0开始替换它们。@Nick text with stars。我已经更新了question@aravind排序仅用于确保以相同字符开头的短语的顺序,例如how
vshow are
。如果短语的开头不相同,那么它们在模式中的相对顺序就不重要了,所以按长度排序是有效的。你能告诉我如何用完全相同的格式用星星替换单词吗?就像我在回答中说的,为了更动态地替换,您可以将回调传递给.replace-replace函数将匹配的子字符串作为参数,因此您可以获取其长度并使用String.prototype.repeat多次重复*