正则表达式适用于 Chrome 和 Firefox 浏览器,但不适用于 safari

The regular expression works with Chrome and Firefox browsers but not on safari

这是正则表达式。

/^[a-zA-Z]+(?!.*?\.\.)(?!.*?\-\-)[a-zA-Z0-9.-]*(?<!\.)(?<!\-)$/

它适用于 Chrome 和 Firefox 浏览器,但在 Safari 浏览器上失败并出现错误:

Invalid regular expression:invalid group specifier name

首先,您应该了解正则表达式模式的作用(或匹配)。

  • ^ - 字符串开头
  • [a-zA-Z]+ - 一个或多个字母
  • (?!.*?\.\.) - 除了换行符之外的任何零个或多个字符后不允许有两个连续的点
  • (?!.*?\-\-) - 任何零个或多个字符后不允许有两个连续的点,换行字符尽可能少
  • [a-zA-Z0-9.-]* - 零个或多个字母、数字、.-
  • (?<!\.)(?<!\-)$ - 字符串的结尾,左边没有 . 也没有 -

因此,您要匹配的是以字母开头,然后包含字母数字字符与点或连字符“交错”的字符串,但 --.. 是禁止的。

没有后视的相同模式看起来像

/^[a-zA-Z](?!.*?\.\.)(?!.*?--)(?!.*[.-]$)[a-zA-Z0-9.-]*$/

这里,(?!.*[.-]$)要求如果有.or -at the end of the string. You should also emove the first+`匹配失败,不需要的时候允许回溯。

注意 上面的模式允许在字符串中使用 .--.。如果您不想这样做,只需使用无环视模式,

/^[a-z]+(?:[-.][a-z0-9]+)*$/i

^[a-z]+(?:[-.][a-z0-9]+)*$ 模式匹配

  • ^ - 字符串开头
  • [a-z]+ - 一个或多个字母(使用 /i 标志启用不区分大小写的匹配)
  • (?:[-.][a-z0-9]+)* - -. 出现零次或多次,然后出现一次或多次 letters/digits
  • $ - 字符串结尾。