^[a-z]([a-z]|((?<!_)_))*[a-z]$ 题主说明是javascript,是不支持负向零宽断言的(TAT)。上面的表达式没法用。 建议分两部分判断: 第一部分判断只包含小写字母和下划线和头尾^[a-z][a-z_]*[a-z]$ 第二部分判断两个相连的下划线str.indexOf("__") === -1 我刚才以为js支持负向断言,是因为chrome的v8引擎自己实现了这个功能。。。 题外话,推荐正则表达式测试网站:regex101,可以直接在下面写测试数据看匹配情况,记得flag选择multiline支持多行数据。 ps.正则表达式相关的问题建议加上相应语言的标签或者说明语言,因为有些语言的正则表达式实现是不同的。
^[a-z]+((_[^_])|[a-z])*[a-z]$ 可匹配 ab wef a_bsdafas a_b_cdsfsdf 不可匹配 sdfads_dsafwe__dasfsd _adsa bdasfsd_ a__b 感觉能满足需求
^[a-z]([a-z]|((?<!_)_))*[a-z]$
题主说明是
javascript
,是不支持负向零宽断言的(TAT)。上面的表达式没法用。建议分两部分判断:
^[a-z][a-z_]*[a-z]$
str.indexOf("__") === -1
我刚才以为js支持负向断言,是因为chrome的v8引擎自己实现了这个功能。。。
题外话,推荐正则表达式测试网站:regex101,可以直接在下面写测试数据看匹配情况,记得
flag
选择multiline
支持多行数据。ps.正则表达式相关的问题建议加上相应语言的标签或者说明语言,因为有些语言的正则表达式实现是不同的。