我正在尝试从一首歌中抓住所有和弦,并将其放入HTML元素中。我正在使用此正则表达式
/(\W)(\s)( Chord )\s/
此正则表达式找不到我需要的所有和弦。我究竟做错了什么?
例如歌曲:
Intro: D G D G D G A G
D G
Klausei ko taip žiūriu
D G
Tavęs ausys neapgavo
D G
Aš kilnų tikslą turiu
D G
Sukišt liežuvį į burną tavo
A G D E G
Tai jokia nepagarba
A D E G
Ir ne kančia
A D E G
Ir ne bėda
A D E G
Greičiau likimo dovana
D D G
Mes pasirengę tegu
Mums gimsta dukros ir arba sūnūs
Arba visi kartu
Ir kuo daugiau, lai mums linksma būna
Tai beveik prabanga
Jokia bėda
Ir ne kančia
Tiesiog likimo dovana
正则表达式表达适用于不具有“知识”的模式,我的意思是,正则表达式并不真正知道合唱,URL或其他任何类型的模式。但是您可以使用您的模式知识定义一个正则表达式,以捕获您认为属于模式的事物。
在这种情况下,您要捕获和弦,该和弦似乎是AG范围内的大写单个字母或在相同范围内的de上-小写字母后跟字母m。可能在两侧都有空格。
因此,您可以定义此正则表达式:
/(?<=\s)([ABCDEFG]|Am|Bm|Cm|Dm|Em|Gm)(?=\s)/gm
这意味着(?<=\s)
:在模式的开头查找\ spaces,但不要捕获它们。
然后([ABCDEFG]|Am|Bm|Cm|Dm|Em|Gm)
:查找集合[ABC ... G]的一个字母或组合Am或Bm或...
然后(?=\s)
,它会在模式末尾查找\ space(不捕获它们)。
https://regex101.com/r/iE1xN3/1
您也可以在其中重新定义正则表达式,
/(?<=\s)([A-G]m?)(?=\s)/gm
相同,但以其他方式表示,其中([A-G]m?)
:表示查找A ... G范围内的字母,后跟字母m。
https://regex101.com/r/iE1xN3/2
对于javascript(不支持后向搜索,您可以执行以下操作:
/(\b)([A-G]m?)(?=\s)/gm
https://regex101.com/r/iE1xN3/3
感谢@stribizhev的反馈)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句