正则表达式问题,点选择所有文本

时间:2011-06-07 21:57:33

标签: javascript regex

我使用一些jquery来突出显示搜索结果。出于某种原因,如果我输入基点,则所有文本都会被选中。我使用正则表达式和替换来将结果包装在标签中,以便为找到的匹配项添加颜色。

我使用的代码

 var pattern = new.RegExp('('+$.unique(text.split(" ")).join("|")+")","gi");

如何防止点选择所有文本,所以我想把这个点留出代码(点没有力量)

5 个答案:

答案 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构造中。