Как получить остальную часть строки в регулярных выражениях? - PullRequest
2 голосов
/ 18 октября 2019

У меня есть следующая строка:

this is a test string user:testuser,anotheruser hashtag:peach,phone,milk site:youtube.com,twitter.com flair:?bobby?

В настоящее время регулярное выражение ([^:\s]+):([^:\s]+) сопоставляет все фильтры с двоеточием между ними (пользователь, хэштег, сайт, стиль). Как я могу также взять оставшуюся часть "this is a test string" в качестве другого совпадения?

Демо:

https://regex101.com/r/L0T2GJ/11

1 Ответ

2 голосов
/ 18 октября 2019

Вы можете добавить альтернативу, чтобы соответствовать любому 0+ символам как можно меньше от начала строки до первого ключа с двоеточием:

^.*?(?=\s+[^:\s]+:)|([^:\s]+):([^:\s]+)
^^^^^^^^^^^^^^^^^^^

См. Демонстрационную версию regex

Подробности

  • ^ - начало строки - .*? - любые 0+ символов, кроме символов разрыва строки, всего нескольковозможно
  • (?=\s+[^:\s]+:) - положительный прогноз гарантирует, что непосредственно справа от текущей позиции есть
    • \s+ - 1+ пробелов
    • [^:\s]+ - 1+ символов кроме : и пробела
    • : - двоеточие
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...