使用Javascript正则表达式转义Lucene字符

使用Javascript正则表达式转义Lucene字符,javascript,regex,node.js,lucene,Javascript,Regex,Node.js,Lucene,我在一个NodeJS项目中使用elasticsearch,在搜索框中输入一个Lucene关键字时,该项目会中断。我正在寻找一个简单的实现,以摆脱他们的特殊字符。正则表达式是最好的方法吗?我已经摆弄正则表达式一段时间了,感觉好像有其他人已经经历了这个过程。只需要摆弄更多 var escaped = query.replace(/([\!\*\+\&\|\(\)\[\]\{\}\^\~\?\:\"])/g, "\\$1"); 全局替换lucene将使用其转义版本大喊大叫的所有cha

我在一个NodeJS项目中使用elasticsearch,在搜索框中输入一个Lucene关键字时,该项目会中断。我正在寻找一个简单的实现,以摆脱他们的特殊字符。正则表达式是最好的方法吗?我已经摆弄正则表达式一段时间了,感觉好像有其他人已经经历了这个过程。

只需要摆弄更多

var escaped = query.replace(/([\!\*\+\&\|\(\)\[\]\{\}\^\~\?\:\"])/g, "\\$1");    

全局替换lucene将使用其转义版本大喊大叫的所有chars实例

我更新了此项,以包括所有elasticsearch和Lucene保留字符:

var pattern = /([\!\*\+\-\=\<\>\&\|\(\)\[\]\{\}\^\~\?\:\\/"])/g;

var str = "}the+S+entence you want]]to e*scape"

str = str.replace(pattern, "\\$1");
var模式=/([\!\*\+\-\=\\&\\\\\;(\)\[\]\{\\\\\^\~\?\:\\/“])/g;
var str=“}您想要的+S+entence]]到e*scape
str=str.replace(模式“\\$1”);

它是否处理&&和| | by\&和\|@sunitj请注意,此正则表达式不会捕捉反斜杠(\)、前斜杠(/)或负(-)上面的答案会转义Lucene特殊字符,但Elastic还有一些未包含在此处的保留字符。请参阅下面的答案