codeofnode codeofnode - 2 months ago 5
Javascript Question

Why doesn't String#match() result contain captured values?

I am trying to extract a value from simplest JSON in javascript.

After searching i found

match
to be closest solution.

But trying this with grouping of
RegExp
, it does not give suitable result.

My object is
{"a":"one"}

and regex i am building is
new RegExp('{"a":"(.*)"}','g')


my results with

'{"a":"one"}'.match(new RegExp('{"a":"(.*)"}','g'))
is
["{"a":"one"}"]


'{"a":"one"}'.match(new RegExp('{"a":"(.*)"}'.replace(/([+?^=!:${}|\[\]\/\\])/g, "\\$1"),'g'))


is also
["{"a":"one"}"]


I am expecting the result should have been
["{"a":"one"}", "one"]


what wrong is happening here?

Answer

See String#match() reference:

If the regular expression includes the g flag, the method returns an Array containing all matched substrings rather than match objects. Captured groups are not returned.

Remove g modifier to get the expected results.

console.log(
   '{"a":"one"}'.match(/{"a":"(.*)"}/)
);

Comments