Я прихожу к вам сегодня, потому что у меня небольшие проблемы. В настоящее время я работаю над импортом csv и преобразовываю данные в объект с моделями в базе данных. Я посылаю API имя объекта, и я сделал $ или для поиска с множественным числом или нет:
if (req.query.name) {
params.$or = [
{name: { '$regex' : new RegExp(req.query.name+'(?!es|s|x)'), '$options' : 'ig' }},
{name: { '$regex' : new RegExp(req.query.name), '$options' : 'ig' }},
]
}
Проблема в том, что если, например, я посылаю "ящики", а модель называется "Box (small)", она не работает. однако, если я отправлю "ящик", он будет работать. Не могли бы вы рассказать мне о моей проблеме? он исходит из регулярного выражения.
EDIT: Я хотел бы найти слово "коробка", даже если я отправлю "ящики". В основном найти слово, множественное или единственное
Заранее спасибо !
(Извините за мой английский, я французский)
Вам нужно удалить (?:es|[sx])
в конце поискового запроса (вы можете использовать .replace(/(?:es|[sx])$/, '')
) и добавить необязательную группу, не отрицательный взгляд:
new RegExp(req.query.name.replace(/(?:es|[sx])$/, '') + '(?:es|[sx])?')
См. Демо-версию regex.
Отрицательный lookahead (?!es|s|x)
не соответствует совпадению, если движок regex находит es
, s
или x
сразу после значения req.query.name
, в то время как вы хотите опционально req.query.name
часть строки.