2015-03-02 20 views
1

我想要一個函數返回給定字符串和正則表達式的開始和結束範圍的數組。我想它的行爲如下:在JavaScript中返回給定正則表達式的文本範圍數組

var sometext = "abc1 abc2 abc3 abc2"; 
var re = /abc2/; 

var range_array = match_range(sometext, re) 

[[5,8],[15,18]] 

我想有一個優雅的功能來做到這一點,但一個解決方案逃脫我。

編輯:我把不當的期望範圍在我原來的例子

回答

1

您可以通過遍歷所有的比賽和使用RegExp.lastIndex尋找到表達式引擎是發現匹配後:

var re = /abc2/g; 
//   ^That's important 
var matches = []; 

while ((m = re.exec(sometext)) !== null) { 
    matches.push([re.lastIndex - m[0].length, re.lastIndex - 1]); 
} 

Demo

或作爲一個函數:

function match_ranges(sometext, re) { 
    var matches = []; 
    while ((m = re.exec(sometext)) !== null) { 
     matches.push([re.lastIndex - m[0].length, re.lastIndex - 1]); 
    } 
    return matches; 
};