【问题标题】:Regex don't include match after captured group正则表达式不包括捕获组后的匹配项
【发布时间】:2016-11-03 15:08:53
【问题描述】:

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

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

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

注意“狗”后面的最后一个分号,我不想捕获它。

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

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

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

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

【问题讨论】:

  • 您真的需要进行字符串替换,还是尝试将字符串设置为仅捕获的组?

标签: javascript regex regex-greedy regex-group


【解决方案1】:

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

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

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

【讨论】:

  • 您是否知道为什么 OP 原始尝试不起作用?我有兴趣...为什么' 是捕获组的一部分?
  • @musefan 编辑了原始正则表达式中的问题解释。
  • @Lucero 谢谢你,很好的解释和更好的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
相关资源
最近更新 更多