【发布时间】:2012-08-24 07:26:09
【问题描述】:
我有我的正则表达式/'(.*)(?:(?:'\s*,\s*)|(?:'\)))/
和我的测试代码('He said, "You're cool."' , 'Rawr')
(我的测试代码模拟传递给函数的参数。)
我将按照我的理解解释我的正则表达式,希望你们中的一些人能对我的问题有所了解。
1)/'表示匹配字符串的开头,需要有'
2)(.*) 表示捕获除\n 之外的任何字符0 次或多次
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 运算符似乎始终默认为 (?:'\)) 端。
如何匹配最短的金额?
【问题讨论】:
-
字符串的开头是
/^,而不是/,fwiw。就我个人而言,我不相信我会使用正则表达式来完成你想要做的事情,而是使用一个小型解析器。令人困惑的正则表达式令人困惑。 -
@DaveNewton - 是的,我知道。这就是为什么我在匹配字符串的开头说的原因。也许我应该在字符串匹配部分的开头说。或者当它开始比赛时,它需要以
'开头。
标签: javascript regex or-operator