Regex для сопоставления слов в определенных строках

Учитывая следующий пример из определения класса в ObjectScript:

Include %sySystem
Include (%sySystem, %soap, %Net.WebSocket)

Class HS.Local.zimpl.fhirpro.UI.FileViewer Extends (HS.Local.zimpl.fhirpro.UI.Super, %CSP.Page)

Мне нужно сопоставить отдельные слова, стоящие за словом «Включить», и шаблон не должен совпадать ни в одной другой строке. Совпадения должны исключать любые знаки препинания.

Регулярное выражение будет использоваться в Javascript.

Мои лучшие усилия привели к следующему:

(?<=^Include \(?)([%A-Za-z0-9.]+)|((?<=, )[%A-Za-z0-9.]+)

Положительный просмотр назад находит строки, начинающиеся с «Включить» и, при необходимости, открывающую скобку, соответствующие словам, которые могут содержать символ процента или точку.

Чтобы сопоставить дальнейшие слова, я добавил альтернативный OR и вторую группу захвата с дальнейшим просмотром назад. Однако это приводит к совпадению многих других строк - по сути, всего, что находится за запятой и пробелом.

🤔 А знаете ли вы, что...
JavaScript поддерживает работу с графикой и аудио, что позволяет создавать мультимедийные веб-приложения.


2
52
1

Ответ:

Решено

Поиск (?<=^Include \(?) применяется только к первой альтернативе в шаблоне регулярного выражения.

Чтобы применить его к любому «слову», которое соответствует вашему основному шаблону [%A-Za-z0-9.]+, вам нужно добавить .* внутри него:

/(?<=^Include .*)[%A-Za-z0-9.]+/gm
/(?<=^Include .*)[%a-z0-9.]+/gmi

Посмотрите демонстрацию регулярных выражений . Я удалил )? из просмотра назад, потому что .* тоже соответствует символу ).

Обратите внимание: если «слова» всегда начинаются с %, вы можете использовать %[A-Za-z0-9.]+ вместо [%A-Za-z0-9.]+.

Более подробная информация:

  • (?<=^Include .*) — положительный просмотр назад, который соответствует местоположению, которому непосредственно предшествует Include в начале строки (если вы удалите флаг m, то только начало всей строки), а затем следует пробел и любые ноль или более других символов. чем символы разрыва строки после него
  • [%A-Za-z0-9.]+ — одна или несколько букв ASCII, цифр и символов . и %.