正则表达式不包含捕获组后的匹配项
Regex don't include match after captured group
我正在尝试使用正则表达式从 less css 预处理器源代码文件中提取变量,但我的问题可以更笼统地提出。
我需要设计一个像这样工作的正则表达式:
- 输入:
@one: cat
输出:cat
- 输入:
@one: dog;
输出:dog
请注意 'dog' 之后的最后一个分号,我不想捕获它。
我几乎可以使用它:new RegExp('^.*:\s*(.*?);?');
但我的决赛 ;?
并未被排除在比赛之外 (.*?)
。
如何让我的选择不那么贪婪?
使它们成为 "less greedy" 是通过在量词后面添加一个 ?
来完成的。问题是您没有添加结束锚 $
- 如果您添加您的正则表达式将按预期工作。该极端情况下的行为取决于正则表达式引擎;例如,.NET 引擎在这种情况下只会匹配单个字符(d
对于 dog
情况)并停止。
但是,恕我直言,这不是解决方案。你应该更准确地描述模式,然后它甚至可以与贪心匹配一起使用。
/^[^:]+:\s*([^;]+);?/;
我正在尝试使用正则表达式从 less css 预处理器源代码文件中提取变量,但我的问题可以更笼统地提出。
我需要设计一个像这样工作的正则表达式:
- 输入:
@one: cat
输出:cat
- 输入:
@one: dog;
输出:dog
请注意 'dog' 之后的最后一个分号,我不想捕获它。
我几乎可以使用它:new RegExp('^.*:\s*(.*?);?');
但我的决赛 ;?
并未被排除在比赛之外 (.*?)
。
如何让我的选择不那么贪婪?
使它们成为 "less greedy" 是通过在量词后面添加一个 ?
来完成的。问题是您没有添加结束锚 $
- 如果您添加您的正则表达式将按预期工作。该极端情况下的行为取决于正则表达式引擎;例如,.NET 引擎在这种情况下只会匹配单个字符(d
对于 dog
情况)并停止。
但是,恕我直言,这不是解决方案。你应该更准确地描述模式,然后它甚至可以与贪心匹配一起使用。
/^[^:]+:\s*([^;]+);?/;