Reputation: 12027
I have this text:
<pre id="lyricsText">
__Verse 1
At the starting of the week
At summit talks, you'll hear them speak
It's only Monday
Negotiations breaking down
See those leaders start to frown
It's sword and gun day
__Chorus 1
Tomorrow never comes until it's too late
__Verse 2
You could be sitting taking lunch
The news will hit you like a punch
It's only Tuesday
You never thought we'd go to war
After all the things we saw
It's April Fools' day
__Chorus 1 (R:2)
Tomorrow never comes until it's too late
__Verse 3
You hear a whistling overhead
Are you alive or are you dead?
It's only Thursday
You feel a shaking on the ground
A billion candles burn around
Is it your birthday?
__Chorus 1 (R:2)
Tomorrow never comes until it's too late
__Outro
Make tomorrow come, I think it's too late
</pre>
and I'm trying to capture the headers. To do that I use this pattern:
var headers = /__.*/g;
which works fine, but I want to exclude (R:2)
or anything similar to that. I'm using another pattern to capture and modify (R:x)
parts:
/(\(R.{0,2}\))/g
I couldn't find a way to make them work together.
How do I write capture /__.*/
and if exist exclude /\(R.{0,2}\)/
?
Upvotes: 3
Views: 161
Reputation: 4795
Assuming that for __Chorus 1 (R:2)
you wish to match __Chorus 1
, this would do it:
/__(.(?!\(R.{0,2}\)))*/g;
Matches as many characters as it can until the next sequence is (R.{2})
Output on your fiddle:
["__Verse 1", "__Chorus 1", "__Verse 2", "__Chorus 1", "__Verse 3", "__Chorus 1", "__Outro"]
Upvotes: 4
Reputation: 94469
var headers = /__[A-Za-z0-9 ]*(?=\(R:\d\))?/g;
JS Fiddle: http://jsfiddle.net/gjmf4/3/
Upvotes: 2