javascript - 使用正则表达式强调字符串中的多个关键字并替换

标签 javascript regex

我有一个具有字符串属性的对象数组,我使用正则表达式通过多个关键字搜索这些属性。例如,如果集合看起来像这样

collection = [
    {searchString: 'Troarn Lower Normandy France'},
    {searchString: 'Tröbitz Brandenburg Germany'},
    {searchString: 'Tröbnitz Thuringia Germany'},
    {searchString: 'Tröchtelborn Thuringia Germany'},
    {searchString: 'Trochtelfingen Baden-Württemberg Germany'},
    {searchString: 'Trockenborn-Wolfersdorf Thuringia Germany'},
    {searchString: 'Trodena Trentino-Alto Adige Italy'},
    {searchString: 'Trodica The Marches Italy'},
    {searchString: 'Trofaiach Styria Austria'},
    {searchString: 'Trofarello Piedmont Italy'}
];

我有一个文本字符串可以像这样搜索

text = 'tro france';

我通过拆分文本得到关键字

keywords = text.split(' ');

然后根据这些关键字构建一个正则表达式

regex = '';
for (i = 0; i < keywords.length; i++ ) {
    if (keywords[i] !== "" && keywords[i] !== undefined) {
        regex += "(?=(^|.*\\s)" + keywords[i] + ")";
    }
}
regex = new RegExp(regex, "i");

所以文本 'tro france' 会给这个正则表达式 /(?=(^|.*\s)tro)(?=(^|.*\s)france )/我 并将匹配集合中的第一项。 我会像这样搜索集合

for (i = 0; i < collection.length; i++) {
    if (collection[i].searchString.search(regex) !== -1) {

        // ... do stuff here

    }
}

但现在我想强调搜索字符串中的关键字。 例如,如果文本是“tro france”,我想要“tro”这个词 和“法国”在我显示结果的地方加下划线。我可以做这个 以一种简单的方式,但我不确定如何进行多场比赛和 更换。我已经有了一个,但只有在我不这样做的时候它才会起作用 一个空格并跳转到其他关键字。

例如,如果文本很简单且“不跳转”,但像 'Troarn Lo' 这样直接匹配,那么我可以像这样替换它

emphasized = new RegExp('('+text+'.*?)', 'i');
emphasized = collection[i]searchString.replace(emphasized, '<em>$1</em>');

但我对多个关键字部分一无所知。

所以如果文本是 'Tro Lo Nor Fra',我可以将集合中的第一项与正则表达式匹配,但在那之后,我想像我所做的那样在这些关键字下划线以上,所有关键字除外。

我怎样才能做到这一点?

最佳答案

您可以将所有关键字组合成一个正则表达式。请注意,这将使 g 标志成为强制性的。

emphasized = new RegExp(keywords.join('|'), 'ig');
emphasized = collection[i].searchString.replace(emphasized, '<em>$&</em>');

请注意,这将突出显示每个关键字的每一次。另外,使用 <mark>而不是 <em> .并且关键字在与 RegExp 一起使用时应该进行转义。

关于javascript - 使用正则表达式强调字符串中的多个关键字并替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29611503/

相关文章:

javascript - jquery .on click 不适用于后来添加的元素

javascript - 使用 JavaScript 将缩略图从灰度淡化为彩色

python - 在 Python 中使用正则表达式删除标点符号时出现错误转义错误

python - 将正则表达式应用于 pandas 数据框列

python 与 URL 数据的路由问题

Python - 搜索包含字符串的列表项(匹配大小写)

javascript - 如何在不刷新页面的情况下将图片上传到服务器?

javascript按值传递而不是按具有不同javascript序列化字符串的引用传递

javascript - React useEffect无限循环

regex - jflex 最有效的前瞻替代品