【发布时间】:2011-05-12 01:21:35
【问题描述】:
我正在尝试使用 JavaScript 和正则表达式突出显示一组关键字,我遇到了一个问题,我的关键字可能包含文字和特殊字符,如 @text #number 等。我正在使用单词边界来匹配和替换整个单词而不是部分单词(包含在另一个单词中)。
var pattern = new regex('\b '( + keyword +')\b',gi);
这里这个表达式匹配整个关键字并突出显示它们,但是如果像“数字:”这样的关键字没有被突出显示。
我知道\bword\b 匹配单词边界,特殊字符是非字母数字字符,因此与上述表达式不匹配。
你能告诉我我可以使用什么正则表达式来完成上述操作。
==更新==
对于上述内容,我尝试了 Tim Pietzcker 对以下正则表达式的建议,
expr: (?:^|\\b|\\s)(" + keyword + ")(?:$|\\b|\\s)
上面的内容似乎可以让我使用字母数字和非字母数字字符匹配整个单词,但是只要关键字在关键字之前或之后有连续的 html 标记而没有空格,它就不会突出显示该关键字(例如社会保障*号码:*) 我尝试了以下正则表达式,但它替换了关键字
之前的 html 标记expr: (?:^|\b|\s|<[^>]+>)number:(?:$|\b|\s|<[^>]+>)
这里的关键字 number: 具有 < br >(为 br 标签故意添加空格以避免浏览器解释标签)接下来没有空格,关键字会突出显示。
你能建议一个表达式,它会忽略整个单词的连续 html 标记,同时包含字母数字和非字母数字字符。
【问题讨论】:
-
当你有某个关键词进行搜索时,为什么要使用正则表达式?只需搜索单词作为字符串。
-
来自tchrist link answer:“请查看this answer,了解使用\b 和\B 之类的东西作为边界的微妙陷阱。”
标签: javascript regex alphanumeric