Я делаю сервис подсветки синтаксиса для гитарных аккордов. Я пытаюсь выделить гитарные аккорды, а не слова. Однако, это становится сложным, когда гитарные аккорды могут состоять из аккордов + расширений.
Например,
God Is So Good
(capo 1 for Eb)
[Verse 1]
D Em A7 D
God is so good, God is so good;
D G Em D A7 D
God is so good, He’s so good to me.
Мне нужно регулярное выражение для захвата не только "D", "E", но также "Dm", "Em7", "Dmaj7", "D / F #" и т. Д.
У меня здесь два массива, и первый массив захватывает аккорды, а второй массив является необязательным расширением.
Array1 = {"A", "Bb", "A #", "B", "C", "C #", "D", "D #", "Eb", "E", "F", "F #", "G", "G #"}
Array2 = {"", "/", "m", "-", "1", "2", "3", "4", "5", "6", "7", " 8 "," 9 "," sus "," maj "}
Как мне записать регулярное выражение в contain
строки в Array 1 , за которыми следуют optional
строки в Array 2 ?
Первоначально я решил создать длинное регулярное выражение, которое бы охватывало все возможные выражения аккордов, но я хочу знать, есть ли лучший способ.
Редактировать: новый пример:
revo, это регулярное выражение не работало с этим примером: что-то вроде D / F # также должно совпадать.
G D/F#
How great is our God, sing with me,
Em7 D/F#
How great is our God, all will see,
edit: \b(?:[BE]b?|[ACDFG]#?)(?:sus|maj|[-1-9/m])*(?!.[a-z]|[A-Z])
у меня сейчас работает.
Работает редактор аккордов