5 个回答

^[a-z]([a-z]|((?<!_)_))*[a-z]$

题主说明是javascript,是支持负向零宽断言的(TAT)。上面的表达式没法用。

建议分两部分判断:

  1. 第一部分判断只包含小写字母和下划线和头尾
    ^[a-z][a-z_]*[a-z]$
  2. 第二部分判断两个相连的下划线
    str.indexOf("__") === -1

我刚才以为js支持负向断言,是因为chrome的v8引擎自己实现了这个功能。。。

题外话,推荐正则表达式测试网站:regex101,可以直接在下面写测试数据看匹配情况,记得flag选择multiline支持多行数据。

ps.正则表达式相关的问题建议加上相应语言的标签或者说明语言,因为有些语言的正则表达式实现是不同的。

^[a-z]([a-z]|_[a-z])*$

图片描述

新手上路,请多包涵

^[a-z]+(_[a-z]+)?$

^[a-z]+((_[^_])|[a-z])*[a-z]$

可匹配

ab
wef
a_bsdafas
a_b_cdsfsdf

不可匹配

sdfads_dsafwe__dasfsd
_adsa
bdasfsd_ 
a__b

感觉能满足需求

宣传栏