I'm having trouble understanding what I did wrong in the regex below:
/^([^#] )#(\1.*?(?=\||$))/gi
It correctly matches foo#foo,xyz,asd123|bar,asd123,xyz
, with the desired result being foo,xyz,asd123
.
But it does not match bar#foo,xyz,asd123|bar,asd123,xyz
. Expected output would be bar,asd123,xyz
.
Basically, I need to use the result of the capture group 1 to search further in the string after the # character. However, it's only working for the match immediately after # and nothing else. I feel like I'm missing a very basic thing here.
CodePudding user response:
You can use
^([^#] )#.*?(\1.*?)(?=\||$)
Details
^
- start of string([^#] )
- Group 1 (\1
): one or more chars other than#
#
- a#
char.*?
- zero or more chars other than line break chars as few as possible(\1.*?)
- Group 2: same value as captured into Group 1 and then any zero or more chars other than line break chars as few as possible(?=\||$)
- a positive lookahead that requires|
or end of string immediately to the right of the current location.