我正在用JavaScript编写一个词法扫描程序。有一个inputStr
和一个正则表达式列表[ regexp1, regexp2, ... ]
,我需要连续匹配inputStr
和正则表达式列表。假设regexps[i]
匹配inputStr
的前5个字符,我将继续从第6个字符开始匹配。
我检查了JavaScript RegExp API,我没有看到任何方法来控制匹配指定索引中的字符串。在这种情况下,RegExp对象的lastIndex
属性不起作用,因为如果lastIndex
处的字符不匹配,它将尝试匹配下一个字符,但我希望它立即停止。< / p>
答案 0 :(得分:2)
我认为你是对的,没有内置任何东西可以帮助你做到这一点。
三个选项:
显而易见的事情:在正则表达式中使用^
(因此它们仅在输入的开头匹配)并删除先前匹配的字符(例如,示例中的前五个字符)在继续之前从字符串开始。
使用动态生成的前缀(如^.{5}
)创建新的正则表达式(例如,跳过前五个字符),但我会假设(这很危险)比切割字符串要贵。当然,您可以按需创建正则表达式,但保留并重用它们;当然,它具有记忆含义。
继续使用lastIndex
但忽略匹配,除非它位于您想要的索引处。这很浪费(正则表达式引擎可以找到你可能会忽略的匹配)而且我不喜欢它,但我想也可以列出它。
我可能从选项1(简单选项)开始,只考虑替代方案,如果我相当确定它是在创建性能或内存流失问题。但JavaScript引擎会创建并清理临时字符串的很多,我认为V8非常善于管理它们。