在 Firefox 中不起作用的负面查看后处理程序的替代方案



这不是关于这个问题的第一个问题,但我找不到适合我的情况的解决方案。

我尝试仅当字符或字符组前面没有字母数字字符时才选择这些字符或字符组。例:

这是一个例子(来自 https://aniceone.com 的简单句子(

我需要匹配"an"、"(a"和"https://aniceone.com"中的字母"a"。

以下表达式适用于 Chrome 但在 Firefox 中,所以我需要一个替代方案。

new RegExp(`((?<!\w)${query})`, "gi")

请注意,要匹配的内容是动态到达的。在这里您可以看到整个函数(仅供参考,我正在尝试突出显示搜索查询中的文本(:

const getHighlightedText = (item, query) => {
const escapedQuery = query.replace(/[.*+?^${}()|[]\]/g, "\$&");
const parts = item.split(new RegExp(`((?<!\w)${escapedQuery})`, "gi"));
return (
<React.Fragment>
{parts.map((part, ind) => (
<span
key={ind}
style={
part.toLowerCase() === query.toLowerCase()
? { fontWeight: "bold", backgroundColor: "#eeff00" }
: {}
}
>
{part}
</span>
))}
</React.Fragment>
);
};

您可以找到new RegExp(`(\W|^)(${escapedQuery})`, "gi")的所有匹配项,检查组 1 是否匹配,并通过仅在适当的索引处附加原始字符串的子字符串来填充最终的块数组。

请参阅示例:

function splitSpecial(s, query) {
var current=0, res=[], rx = new RegExp("(\W|^)(" + query.replace(/[.*+?^${}()|[]\]/g, "\$&") + ")", "gi");
while (m=rx.exec(s)) {
res.push(s.substring(current, m.index + (m[1] ? 1 : 0)));
res.push(m[2]);
current = m.index + m[0].length;
}
if (current < s.length) {
res.push(s.substr(current));
}
return res;
}
console.log(splitSpecial("@abc abc@abc @abc,@abc!@abc", "@abc"));
// => ["", "@abc", " abc@abc ", "@abc", ",", "@abc", "!", "@abc" ]

相关内容

最新更新