我想突出显示一组单词,它们可以单独出现或连续出现。如果它们一个接一个地出现,我希望它们一起突出显示,如果它们不一样,它们也应该突出显示,就像正常行为一样。例如,如果我想突出显示单词:
结果为
主题是:
实时结果:在您键入时显示结果
我希望结果如下:
实时结果:显示< span class =“highlight”>结果为< / span>你输入
空白也很令人头疼,因为我尝试使用或表达式:
( results )|( as )
用空格来防止突出显示低音,崩溃等字样。但由于结果之后的空格与之前的空格相同,因此正则表达式会忽略它并仅突出显示结果。
它可用于突出显示许多单词以及
的组合( (one) (two) )|( (two) (one) )|( one )|( two )
不是一个选项:(
然后我认为可能有一个像|一样工作的运算符如果可能的话,可以用来匹配两者,否则一个或另一个。
答案 0 :(得分:5)
使用空格来确保匹配完整的单词是错误的方法。这就是单词边界的含义:\b
匹配单词和非单词字符之间的位置(其中单词字符通常是字母,数字和下划线)。要匹配所需单词的组合,您可以简单地将它们全部放在一起(就像您已经做过的那样),并尽可能多地重复。像这样:
(?:\bresults\b\s*|\bas\b\s*)+
这假设您要在示例中突出显示第一个和单独的results
(这将满足您对问题的描述)。
答案 1 :(得分:3)
也许你不需要匹配彼此相邻的一串字。为什么不像这样应用你的突出显示:
实时结果:显示< span class =“突出显示”>结果< / span> < span class =“highlight”> as< / span>你输入
唯一不同的是,单词之间的空间没有突出显示,但这是一个干净而简单的妥协,这将节省你的工作时间,并且似乎不会伤害用户体验(至少在我看来)。
在这种情况下,您可以使用替换:
\b(results|as)\b
(\b
是word boundary anchor)
如果你真的不喜欢没有突出显示的单词之间的空格,你可以编写一个jQuery函数来查找仅由空格分隔的“突出显示”跨度然后将它们组合起来(“第二阶段”以实现你的用户体验设计目标)。
<强>更新强>
(好吧......所以合并跨度实际上很难通过jQuery。请参阅Find text between two tags/nodes)