正则表达式不包含捕获组后的匹配项

Regex don't include match after captured group

我正在尝试使用正则表达式从 less css 预处理器源代码文件中提取变量,但我的问题可以更笼统地提出。

我需要设计一个像这样工作的正则表达式:

请注意 'dog' 之后的最后一个分号,我不想捕获它。

我几乎可以使用它:new RegExp('^.*:\s*(.*?);?');

但我的决赛 ;? 并未被排除在比赛之外 (.*?)

如何让我的选择不那么贪婪?

JsBin: http://jsbin.com/ludaqogexa/edit?js,console

使它们成为 "less greedy" 是通过在量词后面添加一个 ? 来完成的。问题是您没有添加结束锚 $ - 如果您添加您的正则表达式将按预期工作。该极端情况下的行为取决于正则表达式引擎;例如,.NET 引擎在这种情况下只会匹配单个字符(d 对于 dog 情况)并停止。

但是,恕我直言,这不是解决方案。你应该更准确地描述模式,然后它甚至可以与贪心匹配一起使用。

/^[^:]+:\s*([^;]+);?/;