我有正则表达式/'(.*)(?:(?:'\s*,\s*)|(?:'\)))/
和我的测试代码('He said, "You're cool."' , 'Rawr')
(我的测试代码模拟传递给函数的参数。)
我将按照我的理解解释我的正则表达式,并希望你们中的一些人可以解释我的问题。
1)/'
表示匹配字符串的开头,需要'
2)(.*)
表示除了\n
0次或更多次以外的任何字符
3)(?:(?:4)|(?:5))
表示不捕获但尝试执行步骤4,如果不起作用,请尝试步骤5
4)(?:'\s*,\s*)
表示不捕获,但需要有一个'
,其中包含0个或更多的空白字符,后跟一个{0}或更多空白字符的<{1}}
5),
表示不捕获,但需要(?:'\))
所以它似乎应该归还(这就是我想要的):
')
+ '
+ He said, "You're cool."
但它返回:
' ,
+ '
+ He said, "You're cool."' , 'Rawr
如果我将我的测试代码更改为')
(没有结束括号),它将返回我想要的内容,但是一旦我添加了最后一个括号,那么我的OR运算符似乎可以执行它想要的任何操作。我希望它首先测试是否有逗号,如果有一个逗号则在那里打破,如果没有一个括号检查。
我已经尝试切换步骤4和步骤5的点,但是OR运算符似乎总是默认为('He said, "You're cool."' , 'Rawr'
侧。
如何匹配尽可能短的数量?
答案 0 :(得分:16)
我认为您的问题不是OR运算符,而是.*
的{{3}}。它将匹配您的完整字符串,然后返回 -track,直到以下表达式匹配为止。此回溯过程中的第一个匹配项为'He said, "You're cool."' , 'Rawr
+ ')
。请改为.*?
!