Friday, May 10, 2024
 Popular · Latest · Hot · Upcoming
-5
rated 0 times [  0] [ 5]  / answers: 1 / hits: 19758  / 15 Years ago, thu, december 31, 2009, 12:00:00

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?


More From » regex

 Answers
34

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:



var m= /(s+)(.*?)(l)([^l]*?)(o+)/.exec('this is hello to you');


Now you've got the whole match in parts:



['s is hello', 's', ' is hel', 'l', '', 'o']


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:



function indexOfGroup(match, n) {
var ix= match.index;
for (var i= 1; i<n; i++)
ix+= match[i].length;
return ix;
}

console.log(indexOfGroup(m, 3)); // 11

[#97953] Saturday, December 26, 2009, 15 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
irvingjamieb

Total Points: 743
Total Questions: 113
Total Answers: 128

Location: Suriname
Member since Sun, Jun 13, 2021
3 Years ago
;