gpt4 book ai didi

javascript - 为什么不贪心三重点?

转载 作者:行者123 更新时间:2023-11-29 10:32:36 25 4
gpt4 key购买 nike

我不打算通过变通方法来解决这个问题,我有兴趣了解它失败的原因。

我正在尝试匹配所有出现的逗号或句点后面没有空格。

我使用了这个模式:([.,]+)(?!)它应该只匹配此字符串中的两种情况:

这是一个测试……还有,另一个测试。

它应该匹配 Andanother 之间的 , 并且它应该匹配句子的最后一个句点。然而,它也匹配三重点的前两个点。 ...+ 不应该让它变得贪婪,以便它看到三重点后跟一个空格而不匹配它吗?

截图:

最佳答案

你的正则表达式 ([.,]+)(?! ) 匹配 .. in ... 因为回溯。当正则表达式可能以不同方式匹配字符串的一部分时会发生这种情况,当您使用量词和环视时就是这种情况。在这里,引擎匹配 ... 并检查是否有空格。在您的字符串中 ... 之后有一个空格,因此匹配失败,但是正则表达式引擎知道在当前位置还有另一种可能的匹配方式,和回溯。它从匹配中丢弃最后的 . 并检查 ... 中的第二个 . 后面是否没有空格。不是,后面有.。所以,.. 是匹配的。

您可以在此处使用原子组解决方法:

/(?=([.,]+))\1(?! )/g

参见 regex demo

先行捕获一个或多个点或逗号,然后 \1 使用文本。由于没有回溯到反向引用的可能性,因此在最后一个 ., 之后检查负先行,如果有空格,则失败发生,并且前面的 , 未选中。

让 JS 正则表达式引擎匹配您想要的内容的更好方法是将 ., 包含在否定先行条​​件中(参见 Pavneet's suggestion):

/[.,]+(?![ .,])/g
^^^^^

关于javascript - 为什么不贪心三重点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42578598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com