javascript – JS中的高效字符串解析:如何创建不分配新字符串的子字符串

我有很多消息来自websocket,我想用正则表达式解析(为简单起见).

正则表达式识别标题的格式,并在读取长度字段后,然后我们知道下一个段所在的位置,并且我可以在该部分上运行正则表达式.

但是,由于我的整个消息可能很大(比如…… 10MB)并且由许多段组成(比如…… 1000,其中平均段的长度略低于1K),然后天真地将主消息切片通过它回到re.exec()在下一个位置似乎会导致大量的GC颠簸,如果不是仅为原始字符串内容分配千兆字节.

我想知道是否有任何正则表达式相关的函数允许我指定开始运行正则表达式的索引?执行和搜索不要让我这样做.

最佳答案
ES6在RegExps上定义了一个“粘性”标志,如果字符串以特定位置的regexp开头,则允许检查:

var position = 3;
var string = "la-la-la";

var re = /\d+/y;
re.lastIndex = position;
var match = re.exec(string);
//... do something with match

有一个讨论:
http://esdiscuss.org/topic/proposal-for-exact-matching-and-matching-at-a-position-in-regexp

转载注明原文:javascript – JS中的高效字符串解析:如何创建不分配新字符串的子字符串 - 代码日志