Javascript - соответствие регулярных выражений для нескольких строк - PullRequest
1 голос
/ 07 января 2020

Я хочу сопоставить регулярное выражение следующим образом:

[Intro]

E|------|---4-|
B|--3h5-|-----|
C|------|-----|
D|------|---3-|
G|-1----|-----|
E|------|--0--|

, чтобы получить эти группы:

Group1: Intro
Group2: E
Group3: ------|---4-|
Group4: B
Group5: --3h5-|-----|
Group6: C
Group7: ------|-----|
etc until the last line

Всегда есть шесть строк. Теперь я дошел до точки, где этот шаблон:

((?:\w|\s|b|#|m){1,2})\|((?:(?:\d|\w|-|\/|^|~|\\|\(|\))+\|)+)

возвращает мне это совпадение для такой строки:

Match1:
Group1: E
Group2: ------|---4-|
Match2:
Group1: B
Group2: --3h5-|-----|

etc until last line

Мой вопрос: как мне сопоставить регулярное выражение, чтобы соответствовать только ровно шесть строк с одним разрывом строки между каждой строкой (возможно, используя шаблон, который я написал, и добавьте разрыв строки в начале или конце или что-то в этом роде)

А также как получить тег [Intro], который находится на расстоянии двух разрывов строки от шесть строк?

1 Ответ

3 голосов
/ 07 января 2020

Один из способов: -

  • Разделить строку сначала по новой строке
  • Удалить все ложные значения
  • сопоставить массив и заменить нежелательные символы
  • сгладить массив

let str = `[Intro]

E|------|---4-|
B|--3h5-|-----|
C|------|-----|
D|------|---3-|
G|-1----|-----|
E|------|--0--|`

let final = str.split('\n')
               .filter(Boolean)
               .map(v=> v.replace(/[\]\[]/g,'').match(/^[^|]+\||.+/g))
               .flat()

console.log(final)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...