我需要一些类似于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);
}
答案 0 :(得分:2)
由于javascript RegExp对象不提供任何内置子字符串功能,并且javascript不允许任何指针魔术,因此您别无选择,只能使用子字符串。但是,除非你期待巨大的字符串,否则我不会太担心子串的性能。子串基本上是一个内存副本,它在硬件级别上是一个令人难以置信的优化操作(想想L1-3高速缓存,允许每个时钟周期复制128位的cpu扩展等)。
为了我的娱乐,我提供了一些创造性的替代方案:
保留你的lastIndex技巧,但在正则表达式的末尾添加`。{m,n} $':
m
成为str.length - endIndex
。 n
成为str.length - lastIndex
使用用javascript编写的正则表达引擎,该引擎具有内置子串扫描。
向Ecma International提交rfc。