Reputation: 18609
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?
Upvotes: 2
Views: 189
Reputation: 626747
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":"(.*)"}/)
);
Or, if you need to get multiple matches, use `RegExp#exec` in a loop or - with the latest JS environments - `String#matchAll`:
<!-- begin snippet: js hide: false console: true babel: false -->
And the matchAll
variant:
const s = '{"a":"one","a":"two"}', regex = /"a":"([^"]*)"/g;
const results = Array.from([...s.matchAll(regex)], m => m[1]);
console.log(results);
Upvotes: 2