Regular используется для сопоставления символов, и одним из его важных применений является поиск.
Когда дело доходит до поиска, легко подумать о поисковых системах, таких какGoogle
.
Google
Есть несколько простых методов поиска, которые сами по себе очень полезны.
Например, реализовать набор функций операции: и, или, не.
В этой статье делается попытка использовать регулярные выражения для их имитации.
1. Ключевые слова
hello
если тыgoogle
искать вhello
, что случается?
Будут найдены все веб-страницы, содержащие слово привет.
В нижней части рисунка выше мы используемТестовая коробкаКаждая строка текста внутри представляет веб-страницу. на каждой из страницhello
выделено.
Мы можем думать, что логика суждения такова:
/hello/i.test(page)
Чтобы визуально подчеркнуть, что найдена правильная «страница», мы позволяем любой, содержащейhello
строка, выделяется вся строка.
На этом этапе вам нужно изменить регулярное выражение:
/^.*hello.*$/im.test(page)
Вышеупомянутое регулярное выражение означает, что позволяютhello
Есть другие персонажи до и после. Эффект следующий:
Чтобы определить, есть ли целевой символ в строке, вы можете использовать утверждение:(?=p)
.
/^(?=.*hello).*$/im.test(page)
«Утверждать» — это утверждение, которое «может судить, верно оно или нет».
(?=p)
Указывает, что символ, следующий за текущей позицией, удовлетворяет регулярному выражениюp
, который соответствует позиции, а не любому символу. как^
Такой же.
2. с
hello world
Google
поискhello world
илиhello+world
.
Он представляет собой целевую страницу для поиска, включаяhello
иworld
эти два слова.
Используйте регулярку, чтобы определить, выполняются ли несколько условий одновременно. Лучший способ - использовать(?=p)
.
/^(?=.*hello)(?=.*world).*$/im.test(page)
3. или
hello OR world
если вGoogle
поле поискаhello OR world
Указывает, что целевая страницаhello
илиworld
слово. Присутствие обоих не обязательно.
обычный|
Изначально разработан для обработки логики «или»:
/^.*(hello|world).*$/im.test(page)
используется в(?=p)
На самом деле, также возможно:
/^(?=.*(hello|world)).*$/im.test(page)
4. Не
hello-world
поискhello-world
Указывает, что целевая страница должна содержатьhello
, но не включаяworld
.
обычный(?!p)
да(?=p)
противоположно . То есть оценивается, что символ после текущей позиции не удовлетворяет регулярному выражениюp
.
/^(?=.*hello)(?!.*world).*$/im.test(page)
5. Последовательность
Если я хочу, чтобы целевая страница отображалась первойhello
, который появляется послеworld
что делать?
/^.*hello(?=.*world).*$/im.test(page)
Обратите внимание, что строка 7 на изображении ниже не выделена.
это мой первый месяц4
Статья, объясняющая использование обычных утверждений ((?=p), (?!p), (?
Эта статья закончилась.
добро пожаловать на чтение"Обычная мини-книга JS".