0

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

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

在大多数情况下它可以工作,但是当术语包含')'并且引发此错误时代码会中断:SyntaxError: unmatched ) in regular expression。似乎 ')' 没有通过以下方式转义:

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

但是,尽管我查看了该代码,但似乎找不到错误所在。能帮忙指点一下吗??或者有没有更简单的方法来实现这一点?

4

1 回答 1

0

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

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

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

于 2013-02-26T13:59:40.093 回答