动态正则表达式模式不适用于特殊字符

时间:2011-05-25 12:35:48

标签: java javascript regex

我的jsp页面中有一个搜索框。当用户在搜索框中键入内容时,将显示建议列表。

我有类似下面的代码,它会动态生成建议列表

  sampleQuery.replace(new RegExp("("+query+")","ig"),'Foo'); ...(1)

现在查询对象是用户在搜索框中键入的字符串。当我在firebug中输入类似“?Foo”的内容时,它会在第1行出现javascript错误。我怀疑“?”是正则表达式的一部分,这就是它抛出错误的原因。

我如何解决问题?

3 个答案:

答案 0 :(得分:1)

你可以事先:

  • 转义具有特殊含义的所有字符(例如?*|.等)
  • 假设所有字母数字字符都不需要转义。

由于后者更容易,我会给你一个例子:

query = query.replace(/[^a-zA-Z0-9]/g, "\\$&");
sampleQuery.replace(new RegExp("("+query+")","ig"),'Foo'); ...(1)

文本a?b|.c生成a\?b\|\.c

答案 1 :(得分:0)

通过Google搜索javascript escape regexp,查看我找到的以下页面:

http://simonwillison.net/2006/Jan/20/escape/#p-6

答案 2 :(得分:0)

?通常是一个正则表达式字符,意思是“零或一个前面的字符”,并且因为?Foo没有前面的字符,它可能会抛出你的错误。你可以用\:“\?Foo”前缀。