10

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

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

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

2)表示捕获除0 次或多次以外的(.*)任何字符 3)表示不捕获但尝试执行第 4 步,如果它不起作用,请尝试第 5 步 4 )表示不捕获但需要有 0 个或更多空白字符的 a 后跟具有 0 个或更多空白字符的 a 5)表示不捕获但需要有\n

(?:(?:4)|(?:5))

(?:'\s*,\s*)',

(?:'\))')

所以它似乎应该返回这个(这就是我想要的):++但它返回:++
'如果 我将He said, "You're cool."我 的测试代码更改为(没有结束括号)它会返回我想要的,但是只要我添加它最后一个括号,那么我的 OR 运算符似乎可以为所欲为。我希望它首先测试是否有逗号,如果有逗号,则在此处中断,如果没有,则检查括号。 我试过切换第 4 步和第 5 步的位置,但 OR 运算符似乎总是默认放在一边。 我怎样才能匹配最短的金额?' ,

'He said, "You're cool."' , 'Rawr')

('He said, "You're cool."' , 'Rawr'

(?:'\))

4

1 回答 1

23

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

于 2012-08-29T16:16:54.897 回答