gpt4 book ai didi

javascript - 优化: (\\[abc] | [^abc])*

转载 作者:行者123 更新时间:2023-11-28 15:41:35 27 4
gpt4 key购买 nike

我有一个很长的正则表达式 (JavaScript),它包含以下构造:

((\\\\)|(\\[abc])|([^abc]))*

正则表达式表示:

匹配任何不包含字母 a、b 和 c 的字符串。

除非它们通过反斜杠转义。

如果反斜杠被转义(例如\\a),也不匹配这些字母。

这是一个简单的匹配示例:

eeeaeaee\aee\\\\ae\\\\\aee

我想知道是否可以优化这个调节表达式。这只是一个小例子,我使用的实际正则表达式更大,而且我有很多代码两次。

最佳答案

我认为更合乎逻辑(并且可能更快)的正则表达式将是这样的:

(?:[^abc\\]|\\.)*

换句话说,反斜杠可以转义任何内容,包括另一个反斜杠。

请注意以下几点:首先,如果您不需要捕获部分比赛,请使用非捕获组。这会给你带来一点性能。其次,当有多种选择时,将最常见的放在第一位。

通过这种方式您可能会获得更好的性能(尝试一下):

[^abc\\]*(?:\\.[^abc\\]*)*

与其对每个字符进行交替,不如一步“吃掉”非特殊字符。嵌套的 * 可能是个坏消息,在正则表达式不匹配的情况下,会导致二次(或更糟)的运行时间,但在这种情况下,这种情况不会发生。

在写这个答案时,我发现JS的正则表达式引擎没有所有格匹配器。这很糟糕——如果它们可用的话,你可以获得更好的最坏情况性能。 (掌握正则表达式的一个重要提示:在对正则表达式进行性能测试时,始终测试匹配和不匹配的情况。最坏的情况通常发生在不匹配的情况下。)

关于javascript - 优化: (\\[abc] | [^abc])*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23584768/

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