Javascript 在字符串的一部分中搜索RegExp

Javascript 在字符串的一部分中搜索RegExp,javascript,python,regex,Javascript,Python,Regex,我需要一些类似于Python的Regexp对象搜索方法。它有三个参数:text、start position和end position,并返回包含start和end字段的Match对象 我有一个函数,返回Match对象,但我不知道如何在这个函数中实现endIndex。我担心性能,非常不愿意使用子字符串方法。 在我的案例中,Javascript中是否有可以使用的功能? 另一个问题是,是否有一个库提供类似于Python re模块的API function search(str, startIn

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

我有一个函数,返回Match对象,但我不知道如何在这个函数中实现endIndex。我担心性能,非常不愿意使用子字符串方法。 在我的案例中,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);
}

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

为了好玩,我提供了一些有创意的子串替代方案:

  • 保留上一个索引技巧,但在正则表达式末尾添加“.{m,n}$”:

    • m
      be
      str.length-endIndex
    • n
      be
      str.length-lastIndex
  • 使用用javascript编写的具有内置子字符串扫描的正则表达式引擎

  • 向Ecma国际提交rfc


  • 你到底想做什么?是否对字符串的特定部分执行正则表达式搜索?您应该只使用子字符串,这不会是一个性能问题,我需要将一些Python文本搜索引擎移植到JavaScript中。在这个函数中,我需要在一些索引之间的字符串的特定部分执行regexp搜索。然后尝试
    substring
    ,看看它是如何执行的,只需将它放在函数的开头:
    str=str.substring(startIndex,endIndex)然后再做其余的(可能先验证
    starIndex
    endIndex
    )你能解释一下什么是
    {n}$
    ?我不明白它是如何工作的。在下面的示例中:字符串“ab”只有在字符串末尾至少有3个字符时才匹配。这与将字符串切割为3个字符的长度并简单匹配“ab”的效果相同。这是一个完全荒谬的故事,根本不表演,但很管用:)