JavaScriptと正規表現を使用して一連のキーワードを強調表示しようとしていますが、1つの問題に直面しています。キーワードには、@ text #numberなどのリテラル文字と特殊文字が含まれている可能性があります。単語境界を使用して、単語全体を照合および置換しています。部分的な単語(別の単語に含まれる)。
var pattern = new regex('\b '( + keyword +')\b',gi);
ここで、この式はキーワード全体に一致し、それらを強調表示しますが、「number:」などのキーワードが強調表示されない場合に備えて。
\bword\b
単語の境界と特殊文字の一致は英数字以外の文字であるため、上記の式とは一致しないことを認識しています。上記を実現するために使用できる正規表現を教えてください。
==更新==
上記については、以下の正規表現に対するTimPietzckerの提案を試しました。
expr: (?:^|\\b|\\s)(" + keyword + ")(?:$|\\b|\\s)
上記は、英数字と英数字以外の文字を含む単語全体を一致させるために機能しているようですが、キーワードの前後にスペースのない連続したhtmlタグがある場合は常に、そのキーワードは強調表示されません(例:ソーシャルセキュリティ*番号: <br> *)次の正規表現を試しましたが、キーワードの前にあるhtmlタグが置き換えられています
expr: (?:^|\b|\s|<[^>]+>)number:(?:$|\b|\s|<[^>]+>)
ここでキーワード番号について:(ブラウザが< br >
タグを解釈するのを避けるためにbrタグのために意図的にスペースを追加しました)間にスペースを入れずに次に来るものは、キーワードで強調表示されます。
英数字と英数字以外の文字の両方を含む単語全体の連続するhtmlタグを無視する式を提案できますか。