我必须编写一个包含以下匹配项的正则表达式:
- 字符串应以字母开头 - [a-zA-Z]
- 字符串可以包含字母、空格、数字、
_
和-
(下划线和连字符) - 字符串不应以
_
或-
(下划线和连字符)结尾 - 下划线字符前后不能有空格。
我想出了下面的正则表达式,但它似乎不起作用
/^[a-zA-Z0-9]+(\b_|_\b)[a-zA-Z0-9]+$/
测试用例:
HelloWorld // Match
Hello_World //Match
Hello _World // doesn't match
Hello_ World // doesn't match
Hello _ World // doesn't match
Hello_World_1 // Match
He110_W0rld // Match
Hello - World // Match
Hello-World // Match
_HelloWorld // doesn't match
Hello_-_World // match
最佳答案
你可以使用
^(?!.*(?:[_-]$|_ | _))[a-zA-Z][\w -]*$
参见 regex demo
解释:
^
- 字符串的开始(?!.*(?:[_-]$|_ | _))
- 在一些字符 (.*
) 之后不得出现 ((?!...)
) 字符串末尾的_
或-
([_-]$
), 也不是空格+_
或_
+空格[a-zA-Z]
- 匹配和使用的第一个字符必须是 ASCII 字母[\w -]*
- 0+ 字 (\w
=[a-zA-Z0-9_]
) 字符或空格或-
$
- 字符串结尾
关于javascript - 下划线前后的正则表达式匹配字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38498175/