gpt4 book ai didi

javascript - 如何降低正则表达式的复杂性?

转载 作者:行者123 更新时间:2023-11-28 17:51:54 25 4
gpt4 key购买 nike

我有一个正则表达式,它可以找到所有以美元表示的货币,例如$290,USD240,$234.45,234.5$,234.6usd

(\$)[0-9]+\.?([0-9]*)|usd+[0-9]+\.?([0-9]*)|[0-9]+\.?[0-9]*usd|[0-9]+\.?[0-9]*(\$)

这似乎有效,但是我如何避免正则表达式的复杂性?

最佳答案

可以通过折叠货币指示器来使正则表达式更短:
您可以说 USD OR $ amount 而不是 USD amount OR $金额。这会产生以下正则表达式:

((\$|usd)[0-9]+\.?([0-9]*))|([0-9]+\.?[0-9]*(\$|usd))

我不确定您是否会发现这不那么复杂,但至少它更容易阅读,因为它更短

字符集[0-9]也可以替换为\d——匹配任何数字的字符类——使正则表达式更短。< br/>这样做,正则表达式将如下所示:

((\$|usd)\d+\.?\d*)|(\d+\.?\d*(\$|usd))

更新:

  • 根据@Toto使用非捕获组,此正则表达式的性能会更高(还删除了 @Simon MᶜKenzie 指出的不必要的捕获组):

    (?:\$|usd)\d+\.?\d*|\d+\.?\d*(?:\$|usd)
  • $.0 之类的金额与正则表达式不匹配,如 @Gangnus指出。我更新了正则表达式来解决这个问题:

    ((\$|usd)((\d+\.?\d*)|(\.\d+)))|(((\d+\.?\d*)|(\.\d+))(\$|usd))

    请注意,我将 \d+\.?\d* 更改为 ((\d+\.?\d*)|(\.\d+)):现在它要么匹配一个或多个数字,可选地后跟一个点,后跟零个或多个数字;或者一个点后跟一个或多个数字。

    没有不必要的捕获组并使用非捕获组:

    (?:\$|usd)(?:\d+\.?\d*|\.\d+)|(?:\d+\.?\d*|\.\d+)(?:\$|usd)

关于javascript - 如何降低正则表达式的复杂性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45322723/

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