JavaScript Regex разбивает строку на слова - PullRequest
3 голосов
/ 01 октября 2019

У меня есть следующее регулярное выражение

console.log("Test #words 100-200-300".toLowerCase().match(/(?:\B#)?\w+/g))

Из приведенного выше видно, что он разделяет "100-200-300". Я хочу, чтобы он игнорировал "-" и держал слово полностью, как показано ниже:

--> ["test", "#words", "100-200-300"]

Мне нужно регулярное выражение для соблюдения тех же правил, с добавлением неразделенных слов, связанных с "-"

1 Ответ

4 голосов
/ 01 октября 2019

Для вашего текущего примера вы можете сопоставить необязательные символы #, 1+ слов и повторить 0+ раз часть, которая соответствует символам # и 1+ слов снова.

#?\w+(?:-\w+)*
  • #? Необязательно #
  • \w+ 1+ символов слова
  • (?:-\w+)* Повторите как группа 0+ раз, соответствующие - и 1+ слова символов

Regex demo

console.log("Test #words 100-200-300".toLowerCase().match(/#?\w+(?:-\w+)*/g));

О якоре \B (следующий текст взят по ссылке)

\ B - отрицательная версияиз \ б. \ B соответствует каждой позиции, где \ b нет. По сути, \ B совпадает в любой позиции между двумя символами слова, а также в любой позиции между двумя несловесными символами.

Если вы хотите использовать эту привязку, посмотрите, например, некоторую разницу в совпадениях с \ B и без \ B

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