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 に答える