Я пишу строку поиска с функцией автозаполнения, которая подключена к конечной точке. Я использую регулярное выражение, чтобы определить «контекст», в котором я нахожусь внутри запроса, который я печатаю в строке поиска. Три контекста - это «атрибут», «значение» и «оператор». Допустимы два оператора «И» и «ИЛИ». Ниже приведен пример примера запроса.
Цвет: синий И Размер: "Большой женский" (<- значения из нескольких слов или имена атрибутов заключены в кавычки) </p>
Мне нужно, чтобы мое регулярное выражение совпадало после того, как вы поставили пробел после синего, и если пользователь начинает вводить "A / AN / AND / O / OR", мне нужно, чтобы оно совпадало. После того, как они поставили пробел после оператора, мне нужно, чтобы он прекратил сопоставление.
Это выражение, которое я придумал.
const contextIsOperator = /[\w\d\s"]+: *[\w\s\d"]+ [\w]*$/
Это совпадает, когда я ставлю пробел после "Blue", но соответствует всему, что я ставлю после этого. Если я заменю последний *
в выражении на +, это сработает, когда я ставлю пробел после "Blue" * и начинают вручную вводить один из операторов, но не тогда, когда у меня просто пробел после "Синий".
Образец, который у меня в голове написан словами:
- группа из одного или нескольких символов / цифр / пробелов / кавычек
- , за которым следует двоеточие
- с последующим необязательным пробелом
- , за которым следует другая группа из одного или нескольких символов / цифр / пробелов / кавычек
- с пробелом (после значения)
- с последующим одним или несколькими символами (это оператор)
Как мне решить эту проблему?