【问题标题】:Return array of text ranges given regex in Javascript返回 Javascript 中给定正则表达式的文本范围数组
【发布时间】:2015-03-02 05:21:23
【问题描述】:

我想要一个函数来返回一个给定字符串和正则表达式的开始和结束范围数组。我希望它的行为类似于以下:

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

var range_array = match_range(sometext, re)

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

我想有一个优雅的功能可以做到这一点,但我没有找到解决方案。

编辑:我在原始示例中放置了不正确的所需范围

【问题讨论】:

    标签: javascript regex


    【解决方案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;
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      相关资源
      最近更新 更多