我使用一些jquery来突出显示搜索结果。出于某种原因,如果我输入基点,则所有文本都会被选中。我使用正则表达式和替换来将结果包装在标签中,以便为找到的匹配项添加颜色。
我使用的代码
var pattern = new.RegExp('('+$.unique(text.split(" ")).join("|")+")","gi");
如何防止点选择所有文本,所以我想把这个点留出代码(点没有力量)
答案 0 :(得分:1)
你可以通过这样做来实现目标:
var pattern = new.RegExp('('+$.unique(text.replace('.', '\\.').split(" ")).join("|")+")","gi");
这里的想法是你试图逃避这个时期,这在正则表达式中充当了外卡。
答案 1 :(得分:1)
这将替换所有特殊的RegExp字符(除了|
,因为您使用它加入条款)与其转义版本,因此您不会收到不需要的匹配或语法错误:
var str = $.unique(text.split(" ")).join("|"),
pattern;
str = str.replace(/[\\\.\+\*\?\^\$\[\]\(\)\{\}\/\'\#\:\!\=]/ig, "\\$&");
pattern = new RegExp('('+str+')', 'gi');
答案 2 :(得分:0)
点是supposed以匹配所有文本(几乎所有内容,真的)。如果您想匹配句点,可以将其作为\.
转义。
答案 3 :(得分:0)
如果你的RegExp中有一段句子,它应该匹配除换行符之外的任何字符。如果你不想要这个功能,你需要逃避这段时间。
示例RegExp,周期已转义/word\./
答案 4 :(得分:0)
您需要转义正在放入正则表达式的文本,以便特殊字符没有不必要的含义。我的代码基于phpjs.org:
中的一些代码var words = $.unique(text.split(" ")).join("|");
words = words.replace(/[.\\+*?\[\^\]$(){}=!<>|:\\-]/h, '\\$&'); // escape regex special chars
var pattern = new RegExp('(' + words + ")","gi");
这会使用反斜杠.\+*?[^]$(){}=!<>|:-
转义以下字符:\
,以便您可以安全地将它们插入到new RegExp
构造中。