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

时间:2012-08-29 16:07:27

标签: javascript regex or-operator

我有正则表达式/'(.*)(?:(?:'\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'侧。 如何匹配尽可能短的数量?

1 个答案:

答案 0 :(得分:16)

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