Захватить слово перед определенным символом

1

Мне нужно создать регулярное выражение javascript, которое будет захватывать "слово", которое предшествует одиночному или двойному :.

Вот несколько примеров:

*, ::before, ::after // do not capture anything
.class1, .class2:before,.class3::after // captures .class2 and .class3
.class4::before // captures .class4

Это то, что у меня есть прямо сейчас: /(\S+?):/g. Он соответствует любому небеловому пространственному символу от одного до бесконечности раз в несколько раз, а затем останавливается на :.

Это работает, за исключением:

  • Если перед словом нет пробела, он захватывает слишком далеко.
  • Он захватывает первый двоеточие ::before и ::after.
  • 0
    Должен ли быть символ слова перед : Если да, то вы можете использовать это (\S+?\b):?: Regex101.com/r/wU8uM7/4
  • 0
    Извините, я понял, что ссылка не соответствует приведенному мной примеру.
Теги:

2 ответа

0
Лучший ответ

Вы можете использовать это регулярное выражение:

 ([.\w]+):?:\w+

Рабочая демонстрация

Изображение 174551

Как вам нужно, это регулярное выражение:

([.\w]+)      Captures alphanumeric and dots strings before
:?:\w+        one or two colons followed with some alphanumeric

Информация о матче:

MATCH 1
1.  [57-64] `.class2`
MATCH 2
1.  [72-79] `.class3`
MATCH 3
1.  [119-126]   `.class4`
  • 0
    Что, если я хочу разрешить дефисы (то есть не только буквенно-цифровые и точки)? regex101.com/r/wS7pV8/3
  • 0
    @thetallweeks просто добавьте его в [.\w] как [-.\w] . Имейте в виду, что [] позволяет вам определить набор символов, поэтому [-.\w] позволит - . A-Za-z0-9_
Показать ещё 3 комментария
0

Просто добавьте дополнительный/необязательный : в конец:

/(\S+?)::?/g

Или вы можете указать это как повторение 1-2 раза:

/(\S+?):{1,2}/g

Демо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню