#javascript #mongodb
#javascript #регулярное выражение #mongodb #регулярное выражение-поисковые системы
Вопрос:
Я кодирую приложение для практики английского языка, мне нужно регулярное выражение javascript, чтобы найти все документы в коллекции MongoDB, в которых свойство ‘answer’ содержит слово, заканчивающееся на ing, и исключить несколько слов из сопоставления, например everything, something, anything, nothing .
Прямо сейчас у меня есть следующий запрос:
{ '$or': [ { answer: /ing/i } ],
I20190303-13:26:00.915(-4)? answer: /^(?!.*(bsomethingb|banythingb|beverythingb|bthingb|bnothingb))/gi }
К сожалению, мой текущий запрос исключает строки типа: ‘Я ничего не делаю’. потому что в тексте ничего нет. Но я хотел бы, чтобы тексты, подобные этому, совпадали, потому что присутствует doing .
Я хочу получить все вопросы из базы данных, ответ на которые содержит один или несколько герундиев, к сожалению, есть слова, оканчивающиеся на ing, которые не являются герундиями.
Комментарии:
1. Хороший вопрос. ПРЕДЛОЖЕНИЕ (это то, что вы могли бы легко сделать в «sed» или «awk»): 1) выполните «замену текста», чтобы ИСКЛЮЧИТЬ слова «something», «anything» и т.д. Из строки поиска, 2) затем — и только тогда — выполните поиск в измененной строке для «ing».
Ответ №1:
Отрицательный взгляд назад должен сработать.
db.collection.find({
"key": {
$regex: "(?<!noth|anyth)ing", //match ing, but not if it is part of nothing, anything
$options: "i"
}
})
Ответ №2:
Вы можете использовать следующее регулярное выражение для поиска всех документов в коллекции MongoDB, где свойство ‘answer’ содержит слово, оканчивающееся на «ing», и исключить несколько слов, таких как «everything», «som
/b(?!(everything|something|anything|nothing)b)w ingb/gi
Я надеюсь, что это решит вашу проблему.