1

Тема: AHK: Получить регулярным выражением определенный текст

Здравствуйте, я не разбираюсь в подобной сложности регулярных выражений, по этому хотел бы попросить помощи.
Есть текст, допустим:

list:
- line item 1
- line item 2
- line item 3
test

Мне необходимо получить в одном "match" только эти строки:

- line item 1
- line item 2
- line item 3

Если быть точнее, строки, которые начинаются с "- " и идут подряд (может быть и только одна такая строка).

Спасибо за уделенное время.

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

2

Re: AHK: Получить регулярным выражением определенный текст

text =
(
list:
- line item 1
- line item 2
- line item 3
test
)
RegExMatch(text, "m`a)(^- .*(\R(?=(?1)))?)+", m)
MsgBox % "|" . m . "|"
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Получить регулярным выражением определенный текст

Кхм.. Я надеялся, что это будет работать и в JS, но кажется я ошибался. Я получаю ошибку:

Invalid regular expression: /(^-\s+.*(\R(?=(?1)))?)+/: Invalid group

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

4

Re: AHK: Получить регулярным выражением определенный текст

На джаваскрипте так можно:

let text = `list:
- line item 1
- line item 2
- line item 3
test`;
let m = text.match(/(^-\s+.*\n?)+(?=\n|$)/gm);
console.log(m ? m[0] : 'not found');
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Получить регулярным выражением определенный текст

Извиняюсь, оказывается мне нужно чтобы в "group1" попал весь список.

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

6

Re: AHK: Получить регулярным выражением определенный текст

Если я делаю так:

((^-\s+.*\n?)+)(?=\n|$)

... то последняя строка попадает еще и во вторую группу.

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

7

Re: AHK: Получить регулярным выражением определенный текст

Я не очень понял, что нужно. Какая разница, что в какую группу попадает? Нужен же какой-то конкретный результат?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8 (изменено: Phoenixxx_Czar, 2023-01-17 13:07:51)

Re: AHK: Получить регулярным выражением определенный текст

Библиотека, которую я использую, как-то странно берет результат, насколько я правильно понял, ей нужно чтобы была только одна группа.
Необходимо получить только "group1":

- line item 1
- line item 2
- line item 3

Кажется у меня получилось решить такой регуляркой:

((?:^-\s+.*\n?)+)(?=\n|$)

Если можно, то можете попытаться рассказать, как она работает?

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

9

Re: AHK: Получить регулярным выражением определенный текст

А что именно непонятно?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder