javascript - 如何在不弄乱特殊字符的情况下将用户输入的值转换为正则表达式?

标签 javascript regex mongodb user-input contains

我正在摆弄 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/

相关文章:

javascript - 了解strapi关系如何运作

MongoDB:通过匹配该项目的另一个字段来更新数组中项目的字段

mongodb - Mongo 查询失败,错误代码 13 和错误消息 'not authorized'

javascript - 去抖功能的开 Jest 单元测试

javascript - 正则表达式 - 匹配

javascript - 尝试将我的应用程序发布到 Heroku 上时出现错误 :"No ' Access-Control-Allow-Origin' header 出现在请求的资源上”

regex - ~/pattern/和 ~ "pattern"之间的区别?

regex - Access VBA正则表达式: Input mask validation.检查字符串是否仅由重复模式组成

javascript - D3 格式天到年

javascript - 在vuejs中使用mutation来过滤?