【问题标题】:RegExp - How can I match the shortest amount possible? [duplicate]RegExp - 我怎样才能匹配最短的金额? [复制]
【发布时间】:2012-08-24 07:26:09
【问题描述】:

我有我的正则表达式/'(.*)(?:(?:'\s*,\s*)|(?:'\)))/
和我的测试代码('He said, "You're cool."' , 'Rawr')
(我的测试代码模拟传递给函数的参数。)

我将按照我的理解解释我的正则表达式,希望你们中的一些人能对我的问题有所了解。

1)/'表示匹配字符串的开头,需要有'

2)(.*) 表示捕获除\n 之外的任何字符0 次或多次

3)(?:(?:4)|(?:5)) 表示不捕获但尝试执行第 4 步,如果它不起作用,请尝试第 5 步

4)(?:'\s*,\s*) 表示不捕获,但需要有一个 ' 带有 0 个或多个空白字符,后跟一个 , 带有 0 个或多个空白字符

5)(?:'\)) 表示不捕获但需要有')

所以它似乎应该返回这个(这就是我想要的):
'+He said, "You're cool."+' ,
但它返回:
'+He said, "You're cool."' , 'Rawr+')

如果我将我的测试代码更改为('He said, "You're cool."' , 'Rawr'(没有结束括号),它会返回我想要的,但是一旦我添加了最后一个括号,那么我的 OR 运算符似乎可以做任何它想做的事情。我希望它首先测试是否有逗号,如果有逗号,则在此处中断,如果没有,则检查括号。

我尝试切换第 4 步和第 5 步的位置,但 OR 运算符似乎始终默认为 (?:'\)) 端。 如何匹配最短的金额?

【问题讨论】:

  • 字符串的开头是/^,而不是/,fwiw。就我个人而言,我不相信我会使用正则表达式来完成你想要做的事情,而是使用一个小型解析器。令人困惑的正则表达式令人困惑。
  • @DaveNewton - 是的,我知道。这就是为什么我在匹配字符串的开头说的原因。也许我应该在字符串匹配部分的开头说。或者当它开始比赛时,它需要以 ' 开头。

标签: javascript regex or-operator


【解决方案1】:

我认为您的问题不是 OR 运算符,而是.*greediness。它将匹配您的完整字符串,然后 back-track 直到以下表达式匹配。此回溯过程中的第一个匹配项将是'He said, "You're cool."' , 'Rawr+')。试试.*?吧!

【讨论】:

    猜你喜欢
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多