When I write a regular expression like:
var m = /(s+).*?(l)[^l]*?(o+)/.exec("this is hello to you");
console.log(m);
I get a match object containing the following:
{
0: "s is hello",
1: "s",
2: "l",
3: "o",
index: 3,
input: "this is hello to you"
}
I know the index of the entire match from the index property, but I also need to know the start and end of the groups matched. Using a simple search won’t work. In this example it will find the first ‘l’ instead of the one found in the group.
Is there any way to get the offset of a matched group?
You can’t directly get the index of a match group. What you have to do is first put every character in a match group, even the ones you don’t care about:
Now you’ve got the whole match in parts:
So you can add up the lengths of the strings before your group to get the offset from the match index to the group index: