我正在尝试从一段文本中解析GitHub用户名(以@开头),以便将它们链接到其关联的个人资料。GitHub用户名的限制如下:
- 只能包含字母数字和单个连字符(不能连续出现连字符) - 不能以连字符开头或结尾(如果以连字符结尾,只需匹配到该位置) - 最长39个字符
例如,以下文本:
"Example @valid hello @valid-username: @another-valid-username, @-invalid @in--valid @ignore-last-dash- an@email.com @another-valid?"
应匹配:
- @valid - @valid-username - @another-valid-username - @in - @ignore-last-dash - @another-valid
应忽略:
- @-invalid - an@email.com
我正在使用JavaScript接近解决此问题。
但是这并不匹配单个字符的用户名(例如@a)。 以下是我的测试结果:https://regex101.com/r/rZ5eW1/2 当前的正则表达式是否有效?如何匹配一个非连字符的单个字符?
- 只能包含字母数字和单个连字符(不能连续出现连字符) - 不能以连字符开头或结尾(如果以连字符结尾,只需匹配到该位置) - 最长39个字符
例如,以下文本:
"Example @valid hello @valid-username: @another-valid-username, @-invalid @in--valid @ignore-last-dash- an@email.com @another-valid?"
应匹配:
- @valid - @valid-username - @another-valid-username - @in - @ignore-last-dash - @another-valid
应忽略:
- @-invalid - an@email.com
我正在使用JavaScript接近解决此问题。
/\B@((?!.*(-){2,}.*)[a-z0-9][a-z0-9-]{0,38}[a-z0-9])/ig
但是这并不匹配单个字符的用户名(例如@a)。 以下是我的测试结果:https://regex101.com/r/rZ5eW1/2 当前的正则表达式是否有效?如何匹配一个非连字符的单个字符?
@hfd.com
的情况下,您希望它做什么?它应该将@htd
作为用户名匹配并忽略.com
,还是不匹配任何内容?我的代码执行前者。此外,在@invalid--username
的情况下,您希望它将@invalid
作为用户名匹配,还是忽略整个字符串? - anon@whatever.com
应该与@whatever
匹配,因此我想让invalid--username
匹配invalid
是有道理的。 - Scott