Не удается сопоставить символ "#" в регулярном выражении границы слова - PullRequest
0 голосов
/ 19 сентября 2019

Я не могу сопоставить символ "#" в конце слова с регулярным выражением

    /\b(C#)\b/i

Я работаю над некоторыми запросами MongoDB.Предметом поиска являются языки программирования в заданном текстовом поле моей коллекции.

Регулярное выражение, которое я использую и почти всегда работает, равно

   /\b(java|php)\b/i

(для конкретногослучай, когда я ищу Java и PHP).

Границы слова необходимы для поиска целых слов (javascript не должен совпадать с java)

Проблема, как уже было сказано, когда яищите "C #", регулярное выражение просто терпит неудачу, не давая результатов.

Регулярное выражение работает, если я удаляю последнюю границу, но тогда пример java / javascript терпит неудачу.

Я застрял в этом пару дней, любая помощь будет признательна.

1 Ответ

0 голосов
/ 19 сентября 2019

За https://stackoverflow.com/a/3241901/2191572:

Граница слова утверждает, что позиции предшествует либо символ слова, за которым не следует ни один, либо за ним следует символ слова, а перед ним не следует один.

Вам необходимо создать собственное определение границы слова:

\b(java|php|c#)(?=[^a-z0-9_]|$)

https://regex101.com/r/LoOADH/1


Примечание: если вам нужно сопоставить что-то вроде #b поскольку это последнее увлечение программированием, то вам также придется заменить начальный \b заглядыванием и начать утверждение строки ^, чтобы оно выглядело так:

(?=[^a-z0-9_]|^)(java|php|c#|#b)(?=[^a-z0-9_]|$)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...