我必须在匹配后写一个正则表达式:
_
和-
(下划线和连字符)_
或-
(下划线和连字符)结尾我提出了以下正则表达式,但它似乎无法正常工作
/^[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
答案 0 :(得分:8)
您可以使用
^(?!.*(?:[_-]$|_ | _))[a-zA-Z][\w -]*$
请参阅regex demo
解释:
^
- 字符串开头(?!.*(?:[_-]$|_ | _))
- 在某些字符(.*
)之后,字符串末尾不得显示(?!...)
)_
或-
[_-]$
1}}),也不是空格+ _
或_
+空间[a-zA-Z]
- 匹配和使用的第一个字符必须是ASCII字母[\w -]*
- 0+字(\w
= [a-zA-Z0-9_]
)字符或空格或-
$
- 字符串结尾答案 1 :(得分:2)
你可以使用这个:
^(?!^[ _-]|.*[ _-]$|.* _|.*_ )[\w -]*$
对于测试用例,我使用修饰符gm
分别匹配每一行。
如果不应将emtpy字符串视为可接受,请将最终*
更改为+
:
^(?!^[ _-]|.*[ _-]$|.* _|.*_ )[\w -]+$
^
和$
匹配输入的开头/结尾(?! )
:不匹配的内容列表:
|
:逻辑或^[ _-]
:以这三个字符中的任何一个开头.*[ _-]$
:以这三个字符中的任何一个结尾.* _
:空格后面跟下划线.*_
:有下划线后跟空格[\w -]
:任何字母数字字符或下划线(也与\w
匹配)或空格或连字符*
:零次或多次+
:一次或多次答案 2 :(得分:1)
这个怎么样?
^[a-zA-Z](\B_\B|[a-zA-Z0-9 -])*[a-zA-Z0-9 ]$
细分:
^
[a-zA-Z] allowed characters at beginning
(
\B_\B underscore with no word-boundary
| or
[a-zA-Z0-9 -] other allowed characters
)*
[a-zA-Z0-9 ] allowed characters at end
$
答案 3 :(得分:0)
哦!我爱我一些正则表达式!
这会有用吗? /^[a-z]$|^[a-z](?:_(?=[^ ]))?(?:[a-z\d -][^ ]_[^ ])*[a-z\d -]*[^_-]$/i
我有点不确定规则4 - 你的意思是下划线可以在或之后或之前有空格,但不能在和之前em>之后?