In JS, I have a set of strings that need to break down into an array. Each string can be breakdown up to 5 groups (Some have less). I’m using regex to break all.
In the below string sets if it includes aa
bb
orcc
it needs to go into the capture group2.
Im not very familiar with regex unfortunately and stuck at this point.
Is this pattern doable only using regex or do I have to break the from ::
to |
and explode it later?
My regex pattern ^[ t]*(?:(?:(w+)|)?(?:(w+):(?:(w+):)?)?)?(w+)::(w+)$
DEMO
String sets (each line run on a loop in JS):
group4::group5 aa:group4::group5 bb:group4::group5 cc:group4::group5 group1|group4::group5 group1|aa:group4::group5 group3:group4::group5 aa:group3:group4::group5 group1|group3:group4::group5 group1|aa:group3:group4::group5
Final results should be able to produce this…
var groups = {1:"group1", 2:"group2", 3:"group3", 4:"group4", 5:"group5"};
Regex pattern would be sufficient if anyone can help me on this
Advertisement
Answer
You may use this PCRE regex comprising a branch reset group, 5 separate capture groups, few optional matches and non-capturing groups:
^h*(?:(?:(w+)|)?(?|(?:(aa|bb|cc):(?:(w+):)?)|(?:((?2)):)?(w+):)?)?(w+)::(w+)$
PS: branch reset group doesn’t work in Javascript.