转义字符串以突出显示函数时出错(js -regexp)

时间:2013-02-26 13:39:35

标签: javascript regex

我正在尝试实现一个突出显示功能,这是我到目前为止所拥有的

function highlight(value, term){
    return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + 
      term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/i, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "i"), "<strong>$1</strong>")
  }

在大多数情况下它可以工作,但是当术语包含')'并且在正则表达式中引发此错误时,代码会中断:SyntaxError:unmatched。似乎')'没有逃脱:

term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/i, "\\$1") 

但是我看看我的代码,但我似乎找不到错误的位置。你能帮忙指出来吗?或者有更简单的方法来实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

您的term.replace代码仅替换找到的任何条款的第一个实例。您需要在正则表达式的末尾使用g。它也没有必要捕获,因为你可以只使用表达式本身(我已经删除了一些不必要的转义):

term.replace(/[\^$()[\]{}*.+?|\\\\]/g, "\\$&")

这里有一个更完整的版本:http://phpjs.org/functions/preg_quote/