正则表达式中“lookbehind断言必须是固定长度”的技术原因是什么?

前端之家收集整理的这篇文章主要介绍了正则表达式中“lookbehind断言必须是固定长度”的技术原因是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
例如,下面的正则表达式会导致失败报告lookbehind断言不是固定长度:
#(?<!(?:(?:src)|(?:href))=["\']?)((?:https?|ftp)://[^\s\'"<>()]+)#S

这种限制不存在于前瞻。

lookahead和lookbehind不像他们的名字暗示那么相似。如果它是一个独立的正则表达式,前瞻表达式的工作方式完全相同,只是它锚定在当前匹配位置,并且不消耗匹配的结果。

Lookbehind是一个完全不同的故事。从当前匹配位置开始,每次向后翻一个字符一个字符,尝试在每个位置匹配其表达式。在没有匹配的情况下,后面必须一直到文本的开始(一次一个字符,记住),在它放弃之前。将其与前瞻表达式进行比较,该表达式仅应用一次。

这当然是一个粗略的过度简化,并不是所有的口味都这样工作,但你得到的想法。应用后瞻的方式与应用前瞻的方式(根本不同)(并且远远不如效率更高)。只有对后瞻才有多远的限制才有意义。

猜你在找的正则表达式相关文章