gpt4 book ai didi

javascript - 为什么此代码卡在 node.js - Javascript 上的错误?

转载 作者:数据小太阳 更新时间:2023-10-29 05:12:00 26 4
gpt4 key购买 nike

我正在尝试运行此正则表达式,但它卡住了我的控制台。为什么?

var str = "Шедевры православной музыки - 20 золотых православных песен";
str.match(/^(([\u00C0-\u1FFF\u2C00-\uD7FF]+[^a-z\u00C0-\u1FFF\u2C00-\uD7FF]*)+) [a-z]+[^\u00C0-\u1FFF\u2C00-\uD7FF]*$/i);

最佳答案

您的正则表达式导致 catastrophic backtracking (参见 a demo of your regex here )由于 (([\u00C0-\u1FFF\u2C00-\uD7FF]+[^a-z\u00C0-\u1FFF\u2C00-\uD7FF]*)+) 部分。由于 [^a-z\u00C0-\u1FFF\u2C00-\uD7FF]* 可以匹配零个字符,你基本上有一个经典的 (a+)+-like 模式(cf: ([\u00C0-\u1FFF\u2C00-\uD7FF]+)+) 导致回溯问题。

要摆脱它,您需要确保子模式在分组内是强制性,并对整个分组应用* 量词:

^([\u00C0-\u1FFF\u2C00-\uD7FF]+(?:[^a-z\u00C0-\u1FFF\u2C00-\uD7FF]+[\u00C0-\u1‌​FFF\u2C00-\uD7FF]+)*) [a-z]+[^\u00C0-\u1FFF\u2C00-\uD7FF]*$

参见 regex demo

在这里,[\u00C0-\u1FFF\u2C00-\uD7FF]+(?:[^a-z\u00C0-\u1FFF\u2C00-\uD7FF]+[\u00C0-\u1‌ FFF\u2C00-\uD7FF]+)* 匹配:

  • [\u00C0-\u1FFF\u2C00-\uD7FF]+ - [\u00C0-\u1FFF\u2C00-\uD7FF] 范围内的一个或多个字符
  • (?:[^a-z\u00C0-\u1FFF\u2C00-\uD7FF]+[\u00C0-\u1‌ FFF\u2C00-\uD7FF]+)* - 零个或多个序列的:
    • [^a-z\u00C0-\u1FFF\u2C00-\uD7FF]+ - 除了 a-z\u00C0-\u1FFF\u2C00-\uD7FF< 之外的一个或多个字符 范围
    • [\u00C0-\u1‌ FFF\u2C00-\uD7FF]+ - \u00C0-\u1‌ FFF\u2C00-\uD7FF 中的一个或多个字符> 范围。

关于javascript - 为什么此代码卡在 node.js - Javascript 上的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35454733/

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