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. *** *** ***'
所以我想在这里做的是,比较与文本值数组匹配的句子单词,并用星号“*”替换它们

条件:

  • 当多个单词匹配而不是单个单词时,替换单词的第一个首选项更高。Exp:
    how are you
    替换为
    how are you
    不是
    how
    也不是
    how are
    。你可以先考虑更高的克数
  • 目前,我只想要4克(4对)
  • 我的解决方案 我把我的句子转换成4克,一对一对地搜索,但我觉得有点多余

    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
    vs
    how are
    。如果短语的开头不相同,那么它们在模式中的相对顺序就不重要了,所以按长度排序是有效的。你能告诉我如何用完全相同的格式用星星替换单词吗?就像我在回答中说的,为了更动态地替换,您可以将回调传递给.replace-replace函数将匹配的子字符串作为参数,因此您可以获取其长度并使用
    String.prototype.repeat多次重复
    *