граничное регулярное выражение для хэштега и слова - PullRequest
0 голосов
/ 08 февраля 2019

В настоящее время у меня есть граничное регулярное выражение, которое соответствует мирам

const trigger = 'foo1 foo2'
const rx = new RegExp(`\\b${trigger}\\b`, 'i');
return rx.test(text);

Это соответствует следующим случаям:

foo1 foo2          <-- exact match
bar foo1 foo2      <-- end of sentence
foo1 foo2 bar      <-- beginning of sentence

, а не

barfoo1 foo2
foo1 foo2bar
barfoo1 foo2bar

Это точноповедение, которое я хочу для стандартной строки

Однако, когда trigger становится #foo, это не работает, потому что # недопустимо для границы слова.

Регулярное выражениеконтролируется моим сервером, но триггер контролируется пользователем.

Это проблема, только если строка начинается с хэштега, поэтому что-то вроде foo1 #foo2 все еще работает.Я всегда мог бы удалить хэштег в начале.

Как заставить регулярное выражение поддерживать как слова, так и хэштеги?

1 Ответ

0 голосов
/ 08 февраля 2019

Вместо использования границ слов вы можете использовать (^|\s+) для левой границы и ($|\s+) для правой границы:

const trigger = '#foo1';
text = 'hello #foo1 blah';
const rx = new RegExp(`(^|\\s+)${trigger}($|\\s+)`, 'i');
console.log(rx.test(text));

Проблема с шаблоном \b#foo1\b заключается в том, что #это уже не слово-символ.Таким образом, \b не будет занимать пробел, предшествующий символу хеша.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...