RegExp - 如何匹配尽可能短的数量?

Aus*_*ust 9 javascript regex or-operator

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

我将解释我的正则表达式,因为我理解它,并希望你们中的一些人可以解释我的问题.

1)/'意味着在匹配字符串的开头,需要有'

2)(.*)意味着捕获任何字符,除了\n0次或更多次

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运算符似乎总是默认为(?:'\))侧面. 我怎样才能匹配尽可能短的数量?

Ber*_*rgi 16

我认为你的问题不是OR操作符,而是贪婪.*.它将匹配您的完整字符串,然后返回跟踪,直到以下表达式匹配.此回溯过程中的第一场比赛将是'He said, "You're cool."' , 'Rawr+ ').试试.*?吧!