我使用$ regex在mongodb集合中查找一条记录。基本上,我将其用作搜索以返回部分或全部与“查询”匹配的所有记录。直到我有[,(,“等)这样的字符,它都可以正常工作。所有选项都可以避免刹车结果,并且我得到0条记录。
我尝试了类似于escape-regexp的程序包,但是这些字符串会产生制动结果并且与数据库记录不匹配。
const query = "MacBook Pro ("
const objectName = "laptops"
return Inventory.find({
$and: [
{ 'type': objectName},
{ 'specs': {$elemMatch: {'specValueLabel': {$regex: ".*" + query + ".*", $options: "i"} }}}
] });
// returns the following error: SyntaxError: Invalid regular expression: /.*macbook pro (.*/: Unterminated group
答案 0 :(得分:0)
您可以使用meteor npm install lodash
除非别无选择,否则您不再需要使用大气包装。
问题是您正在做/.*MacBook Pro (./
,对Javascript说它已经是一个正则表达式。 (
字符是捕获组的开始。
因此将字符串作为带引号的字符串传递以进行转义,例如_.escapeRegExp(".*MacBook Pro (.*")
您可以通过访问www.lodash.com并打开Chrome开发工具(该网站上已加载Lodash)并输入控制台来进行尝试:
_.escapeRegExp(".*MacBook Pro (.*")
-> "\.\*MacBook Pro \(\.\*"
这将为您修复