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

标签 javascript regex regex-greedy regex-group

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

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

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

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

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

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

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

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

最佳答案

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

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

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

关于javascript - 正则表达式不包括捕获组后的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40405024/

相关文章:

java - Arraylist 索引越界

javascript - 仅当模式中不存在字符串时,正则表达式才匹配模式

javascript - 根据浏览器窗口大小流畅地调整所有图像的大小

javascript - Java 脚本在 Chrome、Fire Fox 中工作,但在 IE 中不工作

python - 基于匹配对象的字符串替换 (Python)

java - 处理 Java 正则表达式中的 unicode 符号

正则表达式信用卡号测试

javascript - Birt:通过脚本改变图表尺寸

javascript - jQuery 目标 aria 属性包含值

r - 有没有办法过滤文本字符串以获取与模式不同的值?