在.replace()函数中使用变量

时间:2018-07-02 06:59:11

标签: javascript jquery arrays json ajax

我有一个插件,可在段落中查找缩写,如果找到缩写,则将其替换为文本和工具提示div。因此,当您将鼠标悬停在缩写上时,您会看到缩写的含义。

插件从如下所示的json文件中获取数据:

{
   "abbreviations": [
     {
       "short": "AB",
       "full": "Algemeen Bestuur"
     },
     {
       "short":"AED",
       "full":"Automatisch Externe Defibrillatoren"
     },
     {
       "short": "AFAC",
       "full": "Algemene Fiets Afhaal Centrale"
     }
   ]
 }

该插件通过ajax获取数据,然后在每个段落中查找“短”缩写。

$(data.abbriviations).each(function(index, value) {
    let short = value.short;
    let full = value.full;
    let regex = new RegExp(short, "gi");
    let replaceWith = "<span class='abbr' data-abbr='" + short + "'>" + short + "</span>";
    $("p").each(function() {
      $(this).html($(this).html().replace(regex, replaceWith));
    });
    $("[data-abbr='" + short + "']").append("<span class='tooltip'>" + full + "</span>");
});

变量“ regex”是RegExp,第一个参数是“ short”变量,它获取短文本。如果找到缩写,则将其替换为“ replaceWith”。

这有效,但与整个单词不匹配。例如,如果我有“ BBV”的缩写和“ BB”的缩写,它将“ BB”的完整测试放在“ BBV”中。

如果我用“ / \ b(bb | bbv)/ gi”更改.replace(),它将正常工作。 “ BBV”获得正确的工具提示文本,“ BB”缩写也是如此。

如何使.replace()能够在json fila中获得所有缩写,并使.replace()像“ / \ b(bb | bbv)/ gi”一样工作?

我已经尝试将put变量设置为“ / \ b(” + short +“)/ gi”,但是它不起作用。

任何帮助将不胜感激。

0 个答案:

没有答案