Javascript 如何使此regex safari/iOS兼容?

Javascript 如何使此regex safari/iOS兼容?,javascript,regex,typescript,safari,Javascript,Regex,Typescript,Safari,我正在使用此正则表达式验证我的应用程序的用户名。3-20个字符、字母数字和下划线。不以下划线开头或结尾,并且没有两个连续的下划线 username.search(/^(?=.{3,20}$)(?![!])(?!.[!]{2})[a-zA-Z0-9!]+( 但在iOS/safari上失败,出现以下错误: SyntaxError:无效的正则表达式:无效的组说明符名称 如何使这个正则表达式在所有主要浏览器中都能工作?根据我过去的经验,在Javascript中使用反向查找并没有得到很好的支持 你可以在网

我正在使用此正则表达式验证我的应用程序的用户名。3-20个字符、字母数字和下划线。不以下划线开头或结尾,并且没有两个连续的下划线

username.search(/^(?=.{3,20}$)(?![!])(?!.[!]{2})[a-zA-Z0-9!]+(

但在iOS/safari上失败,出现以下错误:

SyntaxError:无效的正则表达式:无效的组说明符名称


如何使这个正则表达式在所有主要浏览器中都能工作?

根据我过去的经验,在Javascript中使用反向查找并没有得到很好的支持

你可以在网站中看到浏览器不支持它。网站也显示了一个错误,建议不要使用它


另外,我没有时间创建一个适用于您的正则表达式。

我猜您可以简化并尝试使用类似于以下表达式的表达式:

^(?![_])(?!.*[_]{2})[a-zA-Z0-9_]{2,19}[a-zA-Z0-9]$

您可以省略结尾处的负lookback,但也可以省略其他两个负lookaheads
(?![!])(?!.[!]{2})
,并且只使用开头的一个来检查长度3-20

您可以匹配1+次
[a-zA-Z0-9]
,而不是2个负lookahead,这样字符串就不能以下划线开头

然后,使用重复模式匹配单个
,然后再匹配1+次
[a-zA-Z0-9]
,以便字符串不能以下划线结尾

^(?=.{3,20}$)[a-zA-Z0-9]+(?:_[a-zA-Z0-9]+)+$

请参阅

如何更新此文件,使其不需要下划线,而是允许下划线?我尝试摆弄演示,但未能正确执行。@Tristan您可以使用问号将其设置为可选的