JavaScript Regexp:连续匹配

时间:2013-12-31 07:40:15

标签: javascript regex node.js

我正在用JavaScript编写一个词法扫描程序。有一个inputStr和一个正则表达式列表[ regexp1, regexp2, ... ],我需要连续匹配inputStr和正则表达式列表。假设regexps[i]匹配inputStr的前5个字符,我将继续从第6个字符开始匹配。

我检查了JavaScript RegExp API,我没有看到任何方法来控制匹配指定索引中的字符串。在这种情况下,RegExp对象的lastIndex属性不起作用,因为如果lastIndex处的字符不匹配,它将尝试匹配下一个字符,但我希望它立即停止。< / p>

1 个答案:

答案 0 :(得分:2)

我认为你是对的,没有内置任何东西可以帮助你做到这一点。

三个选项:

  1. 显而易见的事情:在正则表达式中使用^(因此它们仅在输入的开头匹配)并删除先前匹配的字符(例如,示例中的前五个字符)在继续之前从字符串开始。

  2. 使用动态生成的前缀(如^.{5})创建新的正则表达式(例如,跳过前五个字符),但我会假设(这很危险)比切割字符串要贵。当然,您可以按需创建正则表达式,但保留并重用它们;当然,它具有记忆含义。

  3. 继续使用lastIndex但忽略匹配,除非它位于您想要的索引处。这很浪费(正则表达式引擎可以找到你可能会忽略的匹配)而且我不喜欢它,但我想也可以列出它。

  4. 我可能从选项1(简单选项)开始,只考虑替代方案,如果我相当确定它是在创建性能或内存流失问题。但JavaScript引擎会创建并清理临时字符串的很多,我认为V8非常善于管理它们。