我对正则表达式有很多困惑,我正在努力解决它们。这里我有以下字符串:
{start}do or die{end}extended string
我的两个不同的正则表达式,我只改变了点的位置:
(.(?!{end}))* //returns: {start}do or di
//^ See here
((?!{end}).)* //returns: {start}do or die
//^ See here
为什么第一个正则表达式吃掉最后一个“e”?
还有这种负向前瞻如何使这个 * 量词不贪婪?我的意思是为什么它不能使用超出 {end} 的字符?
最佳答案
你说你的否定前瞻,不可能匹配正则表达式,在你的情况下是:{end}
。 .
捕获除了新行之外的所有内容。
所以你的第一个正则表达式:
(.(?!{end}))*
它省略了 e
,因为: e{end}
由于否定前瞻而无法匹配。在你的第二个正则表达式中,你在另一边有点的地方可以直到:{end}d
所以 e
包含在你的第二个正则表达式中。
关于javascript - 由于负前瞻的位置导致匹配差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31482156/