Javascript regex not returning match

I have a simple regex in which I’m trying to extract the leading value including the brackets. But for some reason it returns the entire string every time.

Sample string [1] My well-being if it includes [####] i want to then be able to get the contents of the match results so i can get [4] as a result.

const arr = [
  'I am not valid',
  '[1] My well-being',
  '[1] I conversation about',
  '[3] I role within',
  '[3] I members in the company',
  '[3]I priorities',
  '[3]How other teams',
  '[4] I within a team',
  '[4] I am a peer',
  '[4] I am a label',
  '[4] I am a label'
]

const regex = /^(\[\d+\])(.*)/img;
for (let index = 0; index < arr.length; index++) {
  const name = arr[index];
  const match = name.match(regex);
  console.log(match)
}

>Solution :

It’s because of your use of the g flag.

To quote the documentation:

  • If the g flag is used, all results matching the complete regular expression will be returned, but capturing groups will not.
  • if the g flag is not used, only the first complete match and its related capturing groups are returned. In this case, the returned item will have additional properties as described below.

You can fix this by simply removing g from your regular expression, then name.match() will return capturing groups as well.

Leave a Reply