我正在尝试使用JavaScript和正则表达式来高亮一组关键词,但我遇到了一个问题:我的关键词可能包含文字和特殊字符,例如@text #number等。我使用单词边界来匹配和替换整个单词,而不是部分单词(包含在另一个单词中)。
这个表达式匹配整个关键词并将它们突出显示,但是如果像“number:”这样的关键词没有被突出显示,则无法匹配。我知道\bword\b可以匹配单词边界,而特殊字符是非字母数字字符,因此不会被上述表达式匹配。你能告诉我使用哪个正则表达式可以实现上述功能吗?
==更新==
对于上述问题,我尝试了Tim Pietzcker建议的以下正则表达式:
上述方法似乎可以匹配包含字母数字和非字母数字字符的整个单词,但是如果一个关键词前后紧跟着HTML标签而没有空格,它将无法突出显示该关键词(例如社会保障号码:*number:< br >*)。我尝试了以下正则表达式,但它会替换关键词之前的HTML标签。
var pattern = new regex('\b '( + keyword +')\b',gi);
这个表达式匹配整个关键词并将它们突出显示,但是如果像“number:”这样的关键词没有被突出显示,则无法匹配。我知道\bword\b可以匹配单词边界,而特殊字符是非字母数字字符,因此不会被上述表达式匹配。你能告诉我使用哪个正则表达式可以实现上述功能吗?
==更新==
对于上述问题,我尝试了Tim Pietzcker建议的以下正则表达式:
expr: (?:^|\\b|\\s)(" + keyword + ")(?:$|\\b|\\s)
上述方法似乎可以匹配包含字母数字和非字母数字字符的整个单词,但是如果一个关键词前后紧跟着HTML标签而没有空格,它将无法突出显示该关键词(例如社会保障号码:*number:< br >*)。我尝试了以下正则表达式,但它会替换关键词之前的HTML标签。
expr: (?:^|\b|\s|<[^>]+>)number:(?:$|\b|\s|<[^>]+>)
对于关键词number:,后面紧跟着没有空格的<br>
(故意添加空格以避免浏览器解释标签),会使该关键词突出显示。
你能否提供一个表达式,忽略整个单词中包含字母数字和非字母数字字符的连续HTML标记。