MongoDB - SyntaxError: недопустимое регулярное выражение в $ regex - PullRequest
0 голосов
/ 27 декабря 2018

Я использую $ 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

1 Ответ

0 голосов
/ 28 декабря 2018

Вы можете установить lodash с помощью meteor npm install lodash

Вам больше не нужно использовать пакеты атмосферы, если нет выбора.

Проблема в том, что вы делаете /.*MacBook Pro (./который говорит Javascript, что это уже регулярное выражение.Символ ( является началом группы захвата.

Поэтому передайте строку как строку в кавычках для экранирования, например, _.escapeRegExp(".*MacBook Pro (.*")

Вы можете попробовать это, перейдя вwww.lodash.com и откройте инструменты разработчика Chrome (на этом сайте загружен Lodash) и введите в консоли:

_.escapeRegExp(".*MacBook Pro (.*") -> "\.\*MacBook Pro \(\.\*"

Это исправит все проблемы

...