Javascript 为突出显示函数(js-regexp)转义字符串时出错
我正在尝试实现一个突出显示功能,以下是我到目前为止所做的Javascript 为突出显示函数(js-regexp)转义字符串时出错,javascript,regex,Javascript,Regex,我正在尝试实现一个突出显示功能,以下是我到目前为止所做的 function highlight(value, term){ return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/i, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "i")
function highlight(value, term){
return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" +
term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/i, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "i"), "<strong>$1</strong>")
}
尽管我查看了我的代码,但我似乎无法找到错误所在。你能帮我指出吗??或者有更简单的方法来实现这一点吗?您的
术语。replace
代码只替换找到的任何术语的第一个实例。您需要在正则表达式的末尾使用g
。也不需要捕获,因为您可以只使用表达式本身(我已经删除了一些不必要的转义):
这里有一个更完整的版本:我认为应该使用双反斜杠(\\而不是\)。term.replace(/([\\\\\\\\\$(\)\[\]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;省略了gintentional@WataTakaheshi这是为什么呢?同样,这并没有解决问题,因为按照您所说的操作并调用highlight('abc(d)','abc(')返回'abc(d)'而不是'abc(d)'
term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/i, "\\$1")
term.replace(/[\^$()[\]{}*.+?|\\\\]/g, "\\$&")