I have an issue with regex, I don’t know how to explain it. but maybe it’s better to use an example here: (fixing my title post are welcomed)
I have this javascript script which looks like this:
...
someFunction(Vo = Co(!0, {
id: "Shape.c6e2778",
other_attribute: "4",
name: "Square"
}), Vo = Co(!0, {
id: "Shape.3151b12",
other_attribute: "3",
name: "Triangle"
}))
What I want to get is the shape id for shape named "Triangle"
(the id should be 3151b12)
Right now my regex looks like this:
id:\s+"Shape\.([^"]+)",[\S\s]*?name: "Triangle"
But I get c6e2778 which is the id of Square not Triangle. how do I match shape id that is closest to name: "Triangle"
keyword?
Hope this is clear enough.
You can what I did on: https://regexr.com/7jp5j
Thank you
>Solution :
You may use this regex to get you match within a block of {...}
:
id:\s*"Shape\.([^"]+)",(?:[^{}\n]*\n)*\s*name:\s*"Triangle"
RegEx Details:
id:
: Match textid:
\s0
: Match 1+ white spaes"Shape\.
: Match textShape.
([^"]+)
: Match 1+ of any characters that are not"
and capture in group #1",
: Match text",
(?:[^{}\n]*\n)*
: Match 0 or more of any character that are not{
,}
and\n
followed by a line break. Repeat this group 0 or more times.\s*name:\s*
: Match textname
surrounded with optional whitespaces"Triangle"
: Match text"Triangle"