如何用Javascript中的唯一值替换文本中的不同单词?

如何用Javascript中的唯一值替换文本中的不同单词?,javascript,string,replace,Javascript,String,Replace,我想使用RegExp()javascript函数将文本中的许多单词(或短语)替换为相同的值。它用正确的值替换单数单词,但当它必须替换包含相同单词的短语时,它不起作用(Idk how Way work) 例如,在我的文本中,我想用相同的值替换“活动”和“每周活动分钟”: “活动患者对应于每周活动分钟数” 但它只是取代了活动 我是怎么做的: 我有一个keywords.js文件,在该文件中,我可以得到一个对象中的所有短语,结构如下: let keywords: { "activity": {

我想使用RegExp()javascript函数将文本中的许多单词(或短语)替换为相同的值。它用正确的值替换单数单词,但当它必须替换包含相同单词的短语时,它不起作用(Idk how Way work)

例如,在我的文本中,我想用相同的值替换“活动”和“每周活动分钟”:

“活动患者对应于每周活动分钟数”

但它只是取代了活动

我是怎么做的:

我有一个keywords.js文件,在该文件中,我可以得到一个对象中的所有短语,结构如下:

let keywords: {
    "activity": {
        phrases: ['activity']
    },
    "sleep": {
        phrases: ['sleep']
    }
}
在我的html中的我的javascript部分:

@section('javascript')
    <script type="application/javascript" src="{{ asset("js/keywords.js") }}"></script>
    <script>
    $(function () {
       @if($patient)
          let patient = {
              weight: 60,
              height: 70,
              'currents' : {
                  "activity" : 100,
                  "sleep" : 60
              },
          }
          let t = $("#text-section-article").html(t); //the text where i want to look for word/phrases

          Object.entries(keywords).forEach(([key, values])=>{
          //Im iterating all over the keywords words
              Object.entries(values).forEach(([phraseKey, phraseValue])=>{
              //Im iterating all over the phrases
                  if(patient.currents.hasOwnProperty(key)){
                  //If my patient have activity in my object 'currents' I put a tooltip to that word in my body text by replacing it in this way.
                  title = `Your current ${phraseValue} is ${patient.currents[key]}`; //Your current activity is 100
                  t = t.replace(new RegExp(key, 'gi'), '<span data-toggle="tooltip" title="' + title + '" class="tip ' + phraseValue + '">' + phraseValue + '</span>');
                  }
              });       
       });
       $("#text-section-article").html(t);
       @endif
    });
    </script>
@endsection
用patient object的相同值替换我文章文本中的所有短语(如果存在)

我在这件事上遇到了麻烦,如果你能帮我找到一种方法来管理我所描述的一切,我会非常感激,如果有一种简单/更好的方法来处理它,请告诉我


谢谢你的阅读

我不确定是否可以使用regexp,但您可以执行以下操作:

首先,您需要将短语从最长到最短排序。这样,您首先收集所有可能包含较短短语的短语。所以如果你有

['activity', 'Weekly activity']
它应该成为

['Weekly activity', 'activity']
然后,您需要将原始字符串拆分为一个数组,以便可以迭代并查找短语

['The', 'activity', 'patient', 'is', 'correspond', 'to', 'Weekly', 'activity', 'minutes']
想法是将原始阵列转换为:

['The', 'activity', 'patient', 'is', 'correspond', 'to', 'Weekly activity minutes']
我们不再有单独的单词,而是短语。在查找这些短语的同时,还应记录在结果数组中可以找到短语的索引

此时,您只需遍历结果数组,检查是否已记录当前短语的索引,如果已记录,则使用
元素将其包装,如果未记录,则跳过它。最后一步是将结果中的每个短语连接成一个字符串

下面是JSFIDLE演示:


这有点粗糙,短语搜索可以优化以减少迭代次数。

我不确定是否可以使用regexp,但您可以执行以下操作:

首先,您需要将短语从最长到最短排序。这样,您首先收集所有可能包含较短短语的短语。所以如果你有

['activity', 'Weekly activity']
它应该成为

['Weekly activity', 'activity']
然后,您需要将原始字符串拆分为一个数组,以便可以迭代并查找短语

['The', 'activity', 'patient', 'is', 'correspond', 'to', 'Weekly', 'activity', 'minutes']
想法是将原始阵列转换为:

['The', 'activity', 'patient', 'is', 'correspond', 'to', 'Weekly activity minutes']
我们不再有单独的单词,而是短语。在查找这些短语的同时,还应记录在结果数组中可以找到短语的索引

此时,您只需遍历结果数组,检查是否已记录当前短语的索引,如果已记录,则使用
元素将其包装,如果未记录,则跳过它。最后一步是将结果中的每个短语连接成一个字符串

下面是JSFIDLE演示:


这有点粗糙,短语搜索可以优化以减少迭代次数。

嗨,有趣的questino,也许可以迭代列表中的短语,并修改结果字符串?
每周活动分钟数应优先,或者在这之前将替换
活动。嗨,如果您想检查一点,这里有一个JSFIDLE:嗨,有趣的questino,也许可以迭代列表中的短语,并修改结果字符串?
每周活动分钟数
应该先进行,或者在这之前将替换
活动
。嗨,如果您想检查一点,这里有一个JSFIDLE:谢谢您的回复!我稍后会深入检查,但它似乎正是我要寻找的,也许当文章很长,包含很多单词时,它会变得奇怪。我会让你知道:)谢谢你的回复!我稍后会深入检查,但它似乎正是我要寻找的,也许当文章很长,包含很多单词时,它会变得奇怪。我会让你知道:)