kingshuk basak kingshuk basak - 4 months ago 17
Javascript Question

Regex match for a specific pattern excluding a specific pattern

I have sample string as :


  1. '&label=20:01:27&tooltext=abc\&|\|cba&value=6|59|58|89&color=ff0000|00ffff'

  2. '&label=20:01:27&tooltext=abc\&|\|cba&value=6|59|58|89'



My objective is to select the text from '
tooltext=
' till the first occurrence of '
&
' which is not preceded by
\\
. I'm using the following regex :

/(tooltext=)(.*)([^\\])(&)/


and the
.match()
function.

It is working fine for the second string but for the first string it is selecting upto the last occurrence of '
&
' not preceded by
\\
.

var a = '&label=20:01:27&tooltext=abc\&|\|cba&value=6|59|58|89&color=ff0000|00ffff',
b = a.match(/(tooltext=)(.*)([^\\])(&)(.*[^\\]&)?/i)


result,

b = ["tooltext=abc\&|\|cba&value=40|84|40|62&", "tooltext=", "abc\&|\|cba&value=40|84|40|6", "2", "&"]


But what i need is:

b = ["tooltext=abc&||cba&", "tooltext=", "abc&||cb", "a", "&"]

Answer

I think you can use a regex like this:

/tooltext=(.*?\\&)*.*?&/

[Regex Demo]