【发布时间】:2023-04-07 05:41:02
【问题描述】:
我需要在 HTML 的语句中突出显示多个单词。
Ex: words: ['Hello', 'world', 'my']
Statement: 'Hello, welcome to my beautiful world'
我可以在正常情况下使用正则表达式查找和替换来做到这一点(比如用一些标记替换每个单词的出现,比如
<span class="highlight-span"> word </span>.
但问题是,如果我的替换标记字符串中有任何诸如 spa、span、class、lass、high 之类的词,我会遇到问题。)
有什么想法可以更好地做到这一点吗?
以下是供您参考的代码。
import {
Pipe,
PipeTransform
} from '@angular/core';
@Pipe({
name: 'highlight'
})
export class HighlightSearch implements PipeTransform {
transform(value: string, args: string): any {
if (args && value) {
let startIndex = value.toLowerCase().indexOf(args.toLowerCase());
if (startIndex != -1) {
let endLength = args.length;
let matchingString = value.substr(startIndex, endLength);
return value.replace(matchingString, "<span class="highlight-span">" + matchingString + "</span>");
}
}
return value;
}
}
在这种情况下,我不能使用诸如 mar、mark 之类的搜索词。我怎样才能摆脱这些问题?
【问题讨论】:
-
你可以为它创建一个 StackBlitz 吗?我无法复制您的问题。即使我使用 mar, mark 作为搜索字符串,它似乎也能正常工作。
-
这是处理单个搜索字符串的示例代码。如果我发送多个字符串并循环重复,以防我的第二个字符串是 'mar' 时 将出现在语句中!希望你现在明白了。 @nash11
标签: javascript html angular vue.js