Javascript Firefox中不工作的负lookbehind正则表达式的替代方案

Javascript Firefox中不工作的负lookbehind正则表达式的替代方案,javascript,regex,reactjs,firefox,Javascript,Regex,Reactjs,Firefox,这不是关于这个问题的第一个问题,但我无法为我的案例找到解决方案 我试图选择一个字符或一组字符,但前提是这些字符前面没有字母数字字符。例如: 这是一个例子(一个简单的句子) 我需要匹配“an”、“a”和“”中的字母“a” 以下表达式在Chrome中有效,但在Firefox中有效,因此我需要一个替代方法 new RegExp(`((?<!\\w)${query})`, "gi") newregexp(`(? 请注意,要匹配的内容是动态到达的。在这里,您可以看到整个功能(仅供参考,我正试图突出

这不是关于这个问题的第一个问题,但我无法为我的案例找到解决方案

我试图选择一个字符或一组字符,但前提是这些字符前面没有字母数字字符。例如:

这是一个例子(一个简单的句子)

我需要匹配“an”、“a”和“”中的字母“a”

以下表达式在Chrome中有效,但在Firefox中有效,因此我需要一个替代方法

new RegExp(`((?<!\\w)${query})`, "gi")
newregexp(`(?
请注意,要匹配的内容是动态到达的。在这里,您可以看到整个功能(仅供参考,我正试图突出显示搜索查询中的文本):

const getHighlightedText=(项目,查询)=>{
const escapedQuery=query.replace(/[.*+?^${}()\[\]\\]/g,“\\$&”);
const parts=item.split(新的RegExp(`(?
{parts.map((part,ind)=>(
{part}
))}
);
};

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

请参见一个示例:

函数拆分特殊(s,查询){
var current=0,res=[],rx=new RegExp(“(\\W|^”)(“+query.replace(/[.+?^${}()|[\]\]\]/g,“\\$&”)+”,“gi”);
while(m=rx.exec){
res.push(s.substring(当前,m.index+(m[1]?1:0));
res.push(m[2]);
当前=m.index+m[0]。长度;
}
如果(电流//=>[“”,“@abc”abc@abc“,“@abc”,“,”,“@abc”,“!”,“@abc”]
您说
query
是动态的,但您并不是为了在正则表达式模式中使用而转义它。这意味着如果此解决方案对您有效,
query
总是由单词字符和
(?可以安全地替换为
\b
字边界。谢谢,Wiktor,这部分工作正常。但是,你是对的,我没有逃逸正则表达式模式的特殊字符,这使得我的代码在某些情况下会中断,我已经编辑了代码来修复它。现在的问题是,你的解决方案没有捕获特殊字符。
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>
  );
};