Ich versuche eine Funktion zu schreiben, um die String-Darstellung eines musikalischen Akkords zu analysieren.
Beispiel: C-Dur-Akkord - & gt; Cmaj (das möchte ich analysieren)
Nur um es klar zu machen, besteht ein Akkord aus drei verschiedenen Teilen:
Für diejenigen, die Musik beherrschen, denke ich nicht an Schrägstriche (absichtlich).
Die folgende Funktion funktioniert fast. Es funktioniert jedoch immer noch nicht für den folgenden Fall:
Ich nehme an, dass, wenn ich den chords
regex Teil gezwungen hätte, am Ende der Regex zu sein, den Trick gemacht hätte. Ich habe versucht, die $
vor und nach diesem String, aber es hat nicht funktioniert.
Irgendeine Idee? Danke.
%Vor% Ändern Sie [
und ]
in (
und )
in den folgenden Zeilen:
Ansonsten machst du nur Charakterklassen, also passt [maj7|maj|min7|min|sus2]
einfach auf den Buchstaben m
.
Ich nehme an, Sie möchten auch einen Endanker $
hinzufügen? Ich sehe, dass du vorher Probleme damit hattetest, aber das liegt wahrscheinlich an dem oben erwähnten Problem.
Vielleicht möchten Sie auch, dass (#|##|b|bb)
optional ist (d. h. mit ?
: (#|##|b|bb)?
)?
Verzeiht das JavaScript, aber an einem reinen REGEX-Punkt scheint dieses Muster zu funktionieren. Du hast nicht festgelegt, welche Nummern nach welchen Akkordnamen erlaubt sind, aber ich habe angenommen, dass 2 nur nach 'sus' und 7 erst nach 'min' und 'maj' erlaubt ist.
%Vor% Aufbauend auf Wiseguys Antwort habe ich Ihren Regex-Abgleich verbessert. Ich musste #
außerhalb der Variablen accidentals
hinzufügen, da \b
passend zu #
auswirft.
Bonus : Es passt sogar Akkorde wie Dsus9, D7 etc.
Verzeiht das JavaScript, aber das ist der Code, den ich benutzt habe: