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

时间:2016-11-03 15:08:53

标签: javascript regex regex-greedy regex-group

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

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

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

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

我几乎使用了这个:new RegExp('^.*:\\s*(.*?);?');

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

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

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

1 个答案:

答案 0 :(得分:3)

让他们“不那么贪心”是通过在量词之后添加?来完成的。问题是你没有添加一个结束锚$ - 如果你添加你的正则表达式将按预期工作。该角落情况下的行为取决于正则表达式引擎;例如,.NET引擎只匹配单个字符(d情况dog)并停止。

然而,这不是恕我直言的解决方案。你应该更准确地描述模式,然后它甚至可以用贪婪的匹配。

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