我正在尝试实现一个突出显示功能,这是我到目前为止所拥有的
function highlight(value, term){
return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" +
term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/i, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "i"), "<strong>$1</strong>")
}
在大多数情况下它可以工作,但是当术语包含')'并且在正则表达式中引发此错误时,代码会中断:SyntaxError:unmatched。似乎')'没有逃脱:
term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/i, "\\$1")
但是我看看我的代码,但我似乎找不到错误的位置。你能帮忙指出来吗?或者有更简单的方法来实现这一目标吗?
答案 0 :(得分:0)
您的term.replace
代码仅替换找到的任何条款的第一个实例。您需要在正则表达式的末尾使用g
。它也没有必要捕获,因为你可以只使用表达式本身(我已经删除了一些不必要的转义):
term.replace(/[\^$()[\]{}*.+?|\\\\]/g, "\\$&")
这里有一个更完整的版本:http://phpjs.org/functions/preg_quote/