- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不打算通过变通方法来解决这个问题,我有兴趣了解它失败的原因。
我正在尝试匹配所有出现的逗号或句点后面没有空格。
我使用了这个模式:([.,]+)(?!)
它应该只匹配此字符串中的两种情况:
这是一个测试……还有,另一个测试。
它应该匹配 And
和 another
之间的 ,
并且它应该匹配句子的最后一个句点。然而,它也匹配三重点的前两个点。 ...
。 +
不应该让它变得贪婪,以便它看到三重点后跟一个空格而不匹配它吗?
截图:
最佳答案
你的正则表达式 ([.,]+)(?! )
匹配 ..
in ...
因为回溯。当正则表达式可能以不同方式匹配字符串的一部分时会发生这种情况,当您使用量词和环视时就是这种情况。在这里,引擎匹配 ...
并检查是否有空格。在您的字符串中 ...
之后有一个空格,因此匹配失败,但是正则表达式引擎知道在当前位置还有另一种可能的匹配方式,和回溯。它从匹配中丢弃最后的 .
并检查 ...
中的第二个 .
后面是否没有空格。不是,后面有.
。所以,..
是匹配的。
您可以在此处使用原子组解决方法:
/(?=([.,]+))\1(?! )/g
参见 regex demo
先行捕获一个或多个点或逗号,然后 \1
使用文本。由于没有回溯到反向引用的可能性,因此在最后一个 .
或 ,
之后检查负先行,如果有空格,则失败发生,并且前面的 。
或 ,
未选中。
让 JS 正则表达式引擎匹配您想要的内容的更好方法是将 .
和 ,
包含在否定先行条件中(参见 Pavneet's suggestion):
/[.,]+(?![ .,])/g
^^^^^
关于javascript - 为什么不贪心三重点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42578598/
>>> import re >>> p = re.compile('.*&l=(.*)(&|$)') >>> p.search('foo&l=something here&bleh').group(1
最近有一道面试题如下:我们得到了一个单词列表,我们想要格式化它们以最大化回车符的数量,同时将每行的字母数量保持在一个范围内。 例如,我们希望每行的字母范围为 5 - 10(含),一种解决方案是: he
我正在使用二维数组来处理游戏中的对象。数组的维度就像笛卡尔网格上的坐标。当玩家选择一个点时,我想从数组中收集 N 个最近的网格单元,即使该点不是有效的数组索引。 例子:从 [0,0] 到 [10,10
我在 Hibernate 之上使用 Olingo 1.2。 我有一个返回 250 行的请求,每行以一对多关系链接到另一个表。 我执行 $expand 以获取子表中的所有数据,但是当我检查在数据库中执行
我正在 ANTLR4 中构建语法,但收到此警告 TL4.g4:224:12: greedy block ()* contains wildcard;非贪婪语法 ()*?可能是首选 这是它引用的代码行
In the default greedy mode, all data offered to targets are accepted, even if the other target doesn
假设我有 n 个盒子,每个盒子里面都有一些值 b[i] .我可以保证对一组框进行排序,使得 b[1] j; { min_{k=i}^j (c[k] + max(T(i, k-1)
本文已收录到 AndroidFamily ,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末是 LeetCode 第 339 场周赛,你参加
什么是 PHP 中的“贪心 token 解析”?我在 Codeigniter 指南中找到了这个: “除非需要解析变量,否则始终使用单引号字符串,并且在确实需要解析变量的情况下,使用大括号防止贪婪的标记
本文已收录到 AndroidFamily ,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周末是 LeetCode 第 337 场周赛,你参加
我是一名优秀的程序员,十分优秀!