JS regex不工作的iPhone浏览器特别-不知道为什么

3hvapo4f  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(110)

我最近对代码做了一些修改,发现其中一个更新的页面在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);
k3bvogb1

k3bvogb11#

iOS上的Safari不支持lookbehind(在撰写本文时)。您的正则表达式在此处使用lookbehind:(?<!-)
您可以通过更换以下部件来避免这种滞后:

[a-z0-9-]{1,255}(?<!-)

与此:

[a-z0-9-]{0,254}[a-z0-9]
nzrxty8p

nzrxty8p2#

如果你不想匹配双连字符,你可以使用一个否定的lookahead在字符串中Assertnot --来编写模式:

^(?!.*--)(?:\*|[a-z0-9-]{1,255})\.[a-z0-9-]{1,255}\.[a-z]{2,}$

说明

  • ^字符串开头
  • (?!.*--)负前瞻,Assert不向右--
  • (?:非捕获组
  • \*匹配*
  • |或或
  • [a-z0-9-]{1,255}匹配1-255个字符a-z0-9-
  • )关闭非捕获组
  • \.[a-z0-9-]{1,255}匹配.和1-255个字符a-z0-9-
  • \.[a-z]{2,}匹配2个或多个字符a-z
  • $字符串结束

Regex demo

相关问题