Массив регулярных выражений MongoDB (обратное регулярное выражение?) - PullRequest
0 голосов
/ 05 июля 2018

У меня следующая проблема:

Я использую NodeJS с Express и MongoDB для запроса моей базы данных.

У меня есть документ в коллекции «доменов», содержащий поле «домен».

Например:

{ 
  "domain" : "mydomain.com, www.mydomain.com, beta.mydomain.com, *.beta.mydomain.com",
  "APIKeys" : [ "Public" : 111111 ]
}

Или другой документ:

{ 
  "domain" : "example.com, *.example.com",
  "APIKeys" : [ "Public" : 222222 ]
}

Я хотел бы запросить базу данных и вернуть результат, если extractHostname(req.get('Referrer')) соответствует любому из доменов в поле.

var collection = 'domains';
var query = { $and: [ { 'APIKeys.Public' : req.query.APIKey }, {'domain' : extractHostname(req.get('Referrer')) } ] };
var projection = { '_id' : 1 , 'playerPref' : 1 };

Например: extractHostname(req.get('Referrer')) = beta.mydomain.com он должен вернуть true, поскольку он соответствует регулярному выражению beta.mydomain.com.

'test.beta.mydomain.com' должно вернуть true, так как оно соответствует регулярному выражению *.beta.mydomain.com.

'test.www.mydomain.com' должен вернуть false.

'www.mydomain.com.maliciousdomain.com' должен вернуть false.

Есть идеи, как сделать такой запрос, чтобы проверить, соответствует ли Реферер условиям?

Проблема, с которой я сталкиваюсь, заключается в том, что любая из строк в поле должна соответствовать запросу, а не наоборот. Имея в виду подстановочный знак в поле, а не в строке поиска. (Это как резервное регулярное выражение?)

С уважением, Hugo

1 Ответ

0 голосов
/ 05 июля 2018

После просмотра ваших обновленных требований я создал шаблон, который будет соответствовать любому из ваших различных типов доменов. Вот оно

(?(?=.* .*)(([^ \n>]*)(?:.*))|([^\w\W]))

Он всегда будет соответствовать mydomain.com, с необязательным www., необязательным beta. и необязательным подстановочным знаком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...