RegExp搜索字符串的一部分

时间:2013-08-16 15:28:06

标签: javascript python regex

我需要一些类似于Regexp对象的Python方法 - 搜索。它有三个参数:text,start position和end position,并返回具有start和end字段的Match对象。

我有一个函数,返回Match对象,但我不知道如何在这个函数中实现endIndex。我担心性能并且非常不愿意使用substring方法。 在Javascript中是否有可以在我的情况下使用的功能? 另一个问题是有一个库提供类似于Python re模块的API吗?

   function search(str, startIndex, endIndex) {
    var re = new RegExp(this.matcher.source, 'g' + (this.matcher.ignoreCase ? 'i' : '') + (this.matcher.multiLine ? 'm' : ''));

    re.lastIndex = startIndex || 0;
    var value = re.exec(str);

    if (!value)
        return null;

    var start = re.lastIndex - value[0].length;
    var end = re.lastIndex;

    return new Match(start, end);
}

1 个答案:

答案 0 :(得分:2)

由于javascript RegExp对象不提供任何内置子字符串功能,并且javascript不允许任何指针魔术,因此您别无选择,只能使用子字符串。但是,除非你期待巨大的字符串,否则我不会太担心子串的性能。子串基本上是一个内存副本,它在硬件级别上是一个令人难以置信的优化操作(想想L1-3高速缓存,允许每个时钟周期复制128位的cpu扩展等)。

为了我的娱乐,我提供了一些创造性的替代方案:

  1. 保留你的lastIndex技巧,但在正则表达式的末尾添加`。{m,n} $':

    • m成为str.length - endIndex
    • n成为str.length - lastIndex
  2. 使用用javascript编写的正则表达引擎,该引擎具有内置子串扫描。

  3. 向Ecma International提交rfc。