RegExp, чтобы остановить сопоставление после определенной строки

Я ищу RegExp, чтобы остановить сопоставление после определенного ключевого слова.

Это мой вклад:
blabl

тексты 1,40
TextB 3,50
textc 6,90

Blabal 2 3
ддд 3 диджей

ключ textd textf
2,30 4,70 5,90

Что я хочу соответствовать:
blabl

тексты 1,40
TextB 3,50
textc 6,90

Blabal 2 3
ддд 3 диджей

ключ textd textf
2,30 4,70 5,90

Как выглядит мой RegExp в данный момент
[\ D]{1,2}[.] [\ D]{2}

Что я пытался решить проблему
[\ D]{1,2}[.] [\ D]{2}(?= Ключ)

Поэтому я искал что-то вроде этого:
(Что я хочу сопоставить) (что угодно) (ключевое слово)

Я попробовал следующее RegExp:
([\ D] {1,2} [,]. [\ Д]{2} (|.? \ П) + (= ключ))
Но теперь это соответствует:

тексты 1,40
TextB 3,50
textc 6,90

Blabal 2 3
ддд 3 диджей

ключ textd textf
2,30 4,70 5,90

Я читал о группах без захвата, которые, казалось, решили мою проблему. Итак, я попробовал:
([\ D] {1,2} [,]. [\ Д]{2} (> (|?.? \ П) +), (= ключ))
Но это совсем не соответствует.

Я чувствую, что я почти на месте, но я действительно мог бы помочь. Любая идея, что я пропускаю, ценится. Если у вас есть какие-либо вопросы относительно моей проблемы, пожалуйста, не стесняйтесь спрашивать.

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

1 ответ

Решение

Вы можете использовать

/\d+[,.]\d+(?=[\s\S]*key)/g

Смотрите демо регулярных выражений.

подробности

  • \d+ - 1+ цифр
  • [,.] - а , или же .
  • \d+ - 1+ цифр
  • (?=[\s\S]*key) - позитивный взгляд, который требует любых 0+ символов с последующим словом key сразу справа после совпадения последних 1+ цифр.

JS демо:

var s = "blabl\n\ntexta 1,40\ntextb 3.50\ntextc 6,90\n\nblabal 2 3\nddd 3 jj d \n\nkey textd textf\n2,30 4,70 5,90";
var rx = /\d+[,.]\d+(?=[\s\S]*key)/g;
console.log(s.match(rx));

Другие вопросы по тегам