Javascript:如何用html代码替换所有匹配的字符串

Javascript:如何用html代码替换所有匹配的字符串,javascript,regex,highlight,replaceall,Javascript,Regex,Highlight,Replaceall,这是我目前的代码: var filter = ['F', 'p']; var table_data = ['F1', 'F-BAPP', 'ABC']; table_data.forEach(function(d) { var final_value = addClass(d, filter); console.log(final_value); }); function addClass(text, filters) { if (filters === '')

这是我目前的代码:

var filter = ['F', 'p'];
var table_data = ['F1', 'F-BAPP', 'ABC'];

table_data.forEach(function(d)
{
    var final_value = addClass(d, filter);
    console.log(final_value);
});

function addClass(text, filters)
{
    if (filters === '')
    {
        return text;
    }

    String.prototype.replaceAll = function(FindText, RepText)
    {
        regExp = new RegExp(FindText, "gi");
        return this.replace(regExp, RepText);
    };

    filters.forEach(function(kw)
    {
        text = (text + "").replaceAll(kw, "<span class='_p-filter-matched'>" + kw + "</span>");
    });

    return text;
}
<代码>var过滤器=['F',p']; var表_数据=['F1','F-BAPP','ABC']; 表_数据forEach(功能(d) { var final_值=addClass(d,过滤器); console.log(最终_值); }); 函数addClass(文本、过滤器) { 如果(过滤器=='') { 返回文本; } String.prototype.replaceAll=函数(FindText、RepText) { regExp=新的regExp(FindText,“gi”); 返回此.replace(regExp,RepText); }; 过滤器。forEach(功能(kw) { text=(text+).replaceAll(kw,“+kw+”); }); 返回文本; } 我希望最终_值的输出如下所示:

<span class='_p-filter-matched'>F</span>1
<span class='_p-filter-matched'>F</span>-BA<span class='_p-filter-matched'>P</span><span class='_p-filter-matched'>P</span>
 1. <span> becomes <s<span class='_p-filter-matched'>p</span>an.

 2. F-BAPP becomes f-BApp. 
F1
F-BAPP
但有两个问题

<span class='_p-filter-matched'>F</span>1
<span class='_p-filter-matched'>F</span>-BA<span class='_p-filter-matched'>P</span><span class='_p-filter-matched'>P</span>
 1. <span> becomes <s<span class='_p-filter-matched'>p</span>an.

 2. F-BAPP becomes f-BApp. 

1。变成您的主要问题是,您正在迭代
过滤器
数组,并一次替换一个。因此,当您将
F
替换为
“+kw+”
时,您将在下一个过滤器
p
将要替换的字符串上添加多个
p
字符

在下一种方法中,我使用方法的(
函数(replacement)
)一次性完成所有替换,同时使用一个查找所有过滤器的正则表达式(例如:正则表达式
F|p

方法:

var过滤器=['F','p'];
var表_数据=['F1','F-BAPP','ABC'];
表U data.forEach(函数(d)
{
var final_值=addClass(d,过滤器);
console.log(最终_值);
});
函数addClass(文本、过滤器)
{
如果(!filters.length)
返回文本;
String.prototype.replaceAll=函数(过滤器、RepText、令牌)
{
regExp=newregexp(filters.join(“|”)gi);
返回此。替换(regExp,(match)=>
{
返回RepText.replace(令牌,匹配);
});
};
让repText=“*过滤器*”;
let token=“*过滤器*”;
返回text.replaceAll(过滤器、repText、令牌);

}
你能澄清一下你到底想做什么吗?请编辑您的问题。