我最近对代码做了一些修改,发现其中一个更新的页面在iPhone浏览器上无法运行。果然,它确实无法运行,但在我测试的所有其他浏览器上都能运行。
有没有人能看到一些东西或者给予一些见解,为什么这一行代码在iPhone浏览器上会失败,但在其他地方却能工作?iPhone不喜欢正则表达式,我需要让它兼容。请注意,这一行中的浏览器错误,而不是正则表达式本身失败,如果这是有意义的。
我不知道如何在iPhone浏览器上查看调试信息,看看是否提供了任何信息。我知道,如果我从下面删除regex模式,页面将再次在iPhone上工作,这告诉我这就是问题所在。
return this.optional(element) || /^(\*\.|((?!-)[a-z0-9-]{1,255}(?<!-)\.))((?!-)[a-z0-9-]{1,255}(?<!-)\.)*[a-z]{2,}$/i.test(value);
2条答案
按热度按时间k3bvogb11#
iOS上的Safari不支持lookbehind(在撰写本文时)。您的正则表达式在此处使用lookbehind:
(?<!-)
您可以通过更换以下部件来避免这种滞后:
与此:
nzrxty8p2#
如果你不想匹配双连字符,你可以使用一个否定的lookahead在字符串中Assertnot
--
来编写模式:说明
^
字符串开头(?!.*--)
负前瞻,Assert不向右--
(?:
非捕获组\*
匹配*
|
或或[a-z0-9-]{1,255}
匹配1-255个字符a-z
0-9
-
)
关闭非捕获组\.[a-z0-9-]{1,255}
匹配.
和1-255个字符a-z
0-9
-
\.[a-z]{2,}
匹配2个或多个字符a-z$
字符串结束Regex demo