一、背景
在 HOW - 如何实现搜索结果关键词高亮展示 中我们已经介绍过几种方法。其中方案 2 —— 前端处理高亮显示(后端只返回纯文本)给出了如下实现:
export const highlightKeyword = (text: string, keyword: string) => {
if (!keyword) return text
// 转义正则表达式中的特殊字符
const escapedKeyword = keyword.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
// 创建一个正则表达式,匹配任意一个关键词,忽略大小写
const regex = new RegExp(`(${
escapedKeyword})`, "gi")
// 分割
const parts = text.split(regex)
// 匹配
return parts.map((part, index) =>
regex.test(part) ? (
<span key={
index} style={
{
color: "#D7312A" }}>
{
part}
</span>
) : (
part
)
)
}
const SearchResults = ({
results, keyword }) => {
return results.map(item => (
<div key={
item.title}>