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



我试图通过使用正则表达式从更少的css预处理器源代码文件中提取变量,但我的问题可以更普遍地问。

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

    输入
  • : @one: cat 输出:cat
  • 输入
  • : @one: dog; 输出:dog

请注意'dog'后面的最后一个分号,我不希望捕获它。

我有这个几乎工作:new RegExp('^.*:\s*(.*?);?');

但是我的最终;?并没有被排除在匹配(.*?)之外。

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

JsBin: http://jsbin.com/ludaqogexa/edit?js,控制台

通过在量词后添加?来使它们"不那么贪婪"。问题是你没有添加一个结束锚$ -如果你添加你的正则表达式将按预期工作。这种情况下的行为取决于正则表达式引擎;例如,在这种情况下,. net引擎只匹配单个字符(d对应dog)并停止。

然而,我认为这不是解决方案。你应该更精确地描述模式,然后它甚至可以与贪婪匹配。

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

最新更新