正则零宽断言引发ios手机webview白屏问题讨论及解决

11305次浏览

前言

正则表达式零宽断言,导致ios手机webview白屏问题,我也是头一次遇到,主要原因是一些零宽断言在iOS WebView中不被支持,编译报错直接引起手机白屏。解决办法主要是使用替代方案来支持。

零宽断言

chatgpt,madejourney(简称MJ),stable diffusion(简称SD),等智能AI的应用特别流行,我们看看chatgpt是如何定义零宽断言的。

零宽断言是正则表达式中的一种特殊语法,用于在匹配字符串时,指定一个位置,该位置前或后必须满足特定的条件。零宽断言不会消耗匹配的字符,因此也称为“零宽度”。

零宽断言分为向前零宽断言和向后零宽断言,分别用于指定当前位置之前或之后的条件。

向前零宽断言的语法为:(?<=pattern),其中pattern为一个正则表达式,表示当前位置之前必须匹配pattern才能继续匹配。

向后零宽断言的语法为:(?=pattern),其中pattern为一个正则表达式,表示当前位置之后必须匹配pattern才能继续匹配。

例如,正则表达式/(?<=hello)world/可以匹配字符串“helloworld”,但不会匹配“world”或者“hello world”。

零宽断言在正则表达式中非常有用,可以用于复杂的匹配场景,例如匹配特定格式的日期、时间、邮箱地址等。但是,零宽断言也可能会导致正则表达式性能下降,因此在使用时需要谨慎。

有哪些不兼容iOS WebView的零宽断言?

iOS WebView支持大部分正则表达式语法和特性,但是有一些零宽断言在iOS WebView中不被支持,例如:

  1. 向前零宽断言:(?<=pattern)和(?<!pattern)。

  2. 向后零宽断言:(?=pattern)和(?!pattern)。

通俗理解:

(?=pattern):后面是什么

(?!pattern):后面不是什么

(?<=pattern):前面是什么

(?<!pattern):前面不是什么

如果在正则表达式中使用了以上不被支持的零宽断言,就可能导致iOS WebView无法正常加载网页,出现白屏现象。

如果您需要在iOS WebView中使用零宽断言,可以尝试使用其他正则表达式语法或者避免使用零宽断言。或者,您可以使用JavaScript代码来处理正则表达式,而不是在正则表达式中使用零宽断言。

零宽断言报错

let regx = /(?<=\$).*?(?=\$)/g;

报错:SyntaxError: Invalid regular expression: invalid group specifier name __ERROR

解决方案

不用这种零宽断言,直接换用其他正则。或者其他匹配的方式。

相关文章: