Я ищу способ сопоставления с точными словами, введенными в регулярном выражении.
К сожалению, граница не будет работать, потому что поисковый термин может содержать несколько слов.
Я придумалэто регулярное выражение (?:^|[\\s])(<word>)(?:$|[\\s!?])
, и оно отлично работает, пока не будет несколько <word>
с одного на другой.
Пример:
Регулярное выражение: (?:^|[\\s])(won)(?:$|[\\s!?])
Текст:
We won won won
В этом тексте оно будет соответствовать только каждому второму слову.Я понимаю, это потому, что требуется пробел, но этот пробел уже включен в предыдущее слово.
С этим связано больше трудностей.
Оно не должно совпадать с сокращениями, такими как won
не должно совпадать won't
.Это также относится к дефисным словам won-me
.
. Чтобы сделать это простым, я сделал модульные тесты для тестирования всех случаев:
https://regex101.com/r/9Mj0UC/4/tests
Примечание:Я не могу проверить в модульных тестах, соответствует ли он каждому или каждой второй.Поэтому, пожалуйста, просто посмотрите на панель тестовых строк.
Может ли кто-нибудь предложить решение для этого безумия Regex?
Оно должно быть написано в Regex (и совместимо с JS)