我正在摆弄 MongoDB,偶然发现了一些东西。我想做一个简单的应用程序,用户可以在其中搜索集合中的所有文档,获取键 username
包含特定用户输入值的文档。
为了实现“包含”它 appears可以使用正则表达式。这工作正常,但我如何将用户输入转换为正则表达式?问题是简单地做...
new RegExp(value);
... 由于特殊字符(如 (
、[
等)而不起作用。这意味着用户无法执行包含 (
这样。
我认为逃避一切就可以完成这项工作:
new RegExp(value.replace(/./g, function(x) {
return "\\" + x;
});
...但这不是因为一些转义字符也很特殊(例如 \d
),所以这样非特殊字符就变得特殊了。
我有点不知道如何将用户输入的值转换为正则表达式。或者是否有更好的方法来查询其键包含特定用户输入值的所有文档?
最佳答案
实现:
基于 this source .
var oldText = "[hello, world :) ]";
var sre = new RegExp('(\\' + ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\'].join('|\\') + ')', 'g');
var newText = oldText.replace(sre, '\\$1'); // "\[hello, world :\) \]"
进一步说明:
sre 是一个正则表达式,它匹配所有可能的特殊字符并使用括号以便它可以引用匹配的部分。
不完整的sre示例:
/(\/|\.|\\)/g
这将尝试匹配以下任何字符:“/”、“.”和 ”\”。然后使用
text.replace(sre, '\\$1');
将使用“\”转义文本中的每个匹配字符。所以它将取代“。”用“\.”等
关于javascript - 如何在不弄乱特殊字符的情况下将用户输入的值转换为正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8331988/