Учитывая следующий пример из определения класса в 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 [JS]](https://i.imgur.com/WsjO6zJb.png)


Поиск (?<=^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, цифр и символов . и %.
Великолепно! Спасибо, это решение для меня не было очевидным, и оно отлично работает. Тот же шаблон можно использовать повторно для других строк.