Слово регулярного выражения для сопоставления текста, который включает слово, оканчивающееся на ‘ing’, но исключает слова anything, что-то, ничего

#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
  

Я надеюсь, что это решит вашу проблему.