gpt4 book ai didi

JavaScript 正则表达式 : successive matches

转载 作者:行者123 更新时间:2023-11-29 22:06:09 26 4
gpt4 key购买 nike

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

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

最佳答案

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

三个选项:

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

  2. 使用 ^.{5} 等动态生成的前缀创建新的正则表达式(例如,跳过前五个字符),但我假设(这是危险的)那比切开绳子更昂贵。当然,您可以按需创建正则表达式,但保留并重复使用它们;这当然会影响内存。

  3. 继续使用 lastIndex 但忽略匹配,除非它位于您希望它位于的索引处。这很浪费(正则表达式引擎会找到一个你可能会忽略的匹配项),我不喜欢它,但我想还是把它列出来吧。

我可能会从选项 1(简单选项)开始,并且只有在我相当确定它会造成性能或内存流失问题时才考虑替代方案。但是 JavaScript 引擎会创建并清理大量 临时字符串,我认为 V8 非常擅长管理它们。

关于JavaScript 正则表达式 : successive matches,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20853759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com