Home > Blockchain >  Regex: match after capture group 1 match, using it's result
Regex: match after capture group 1 match, using it's result

Time:09-30

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.

regexr.com/6ussf

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.
  • Related