我有我的正则表达式/'(.*)(?:(?:'s*,s*)|(?:')))/
和我的测试代码('He said, "You're cool."' , 'Rawr')
(我的测试代码模拟传递到函数中的参数。)
我将解释我的正则表达式,希望你们中的一些人能对我的问题有所了解
1) /'
表示匹配字符串的开头需要有'
2) (.*)
表示捕获除n
之外的任何字符0次或更多次
3) (?:(?:4)|(?:5))
表示不捕获,但尝试执行第4步,如果不起作用,则尝试执行第5步
4) (?:'s*,s*)
表示不捕获,但需要有一个包含0个或更多空白字符的'
,然后是一个包含零个或更多空格字符的,
5) (?:'))
表示不捕获,但需要')
所以它似乎应该返回这个(这就是我想要的):'
+He said, "You're cool."
+' ,
但它返回:'
+He said, "You're cool."' , 'Rawr
+')
如果我将测试代码更改为('He said, "You're cool."' , 'Rawr'
(无尾括号),它会返回我想要的内容,但只要我添加最后一个括号,我的OR运算符似乎就可以执行它想要的任何操作。我希望它首先测试是否有逗号,如果有逗号,则中断,如果没有括号,则检查是否有逗号
我已经尝试切换步骤4和步骤5的点,但OR运算符似乎总是默认为(?:'))
侧。如何匹配尽可能短的金额
我不认为你的问题是OR运算符,而是.*
的贪婪。它将匹配您的完整字符串,然后返回-跟踪,直到以下表达式匹配。该回溯过程中的第一个匹配将是'He said, "You're cool."' , 'Rawr
+')
。请尝试.*?
!