[英]Regex match character before and after underscore
我必须写一个正则表达式匹配以下:
_
和-
(下划线和连字符) _
或-
结尾(下划线和连字符) 我提出了以下正则表达式,但它似乎不起作用
/^[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 -]*$
请参阅正则表达式演示
说明 :
^
- 字符串的开头 (?!.*(?:[_-]$|_ | _))
- 在某些字符( .*
)之后不得出现( (?!...)
)a _
或-
在字符串的末尾( [_-]$
),也不是空格+ _
或_
+空格 [a-zA-Z]
- 匹配和消耗的第一个字符必须是ASCII字母 [\\w -]*
- 0+字( \\w
= [a-zA-Z0-9_]
)字符或空格或-
$
- 结束字符串 你可以用这个:
^(?!^[ _-]|.*[ _-]$|.* _|.*_ )[\w -]*$
对于测试用例,我使用修饰符gm
分别匹配每一行。
如果不应将emtpy字符串视为可接受,则将最终*
更改为+
:
^(?!^[ _-]|.*[ _-]$|.* _|.*_ )[\w -]+$
^
和$
匹配输入的开头/结尾 (?! )
的事情, 不应该匹配列表:
|
:逻辑OR ^[ _-]
:从这三个字符中的任何一个开始 .*[ _-]$
:以这三个字符中的任何一个结尾 .* _
:空格后面跟下划线 .*_
:有下划线,后跟空格 [\\w -]
:任何字母数字字符或下划线(也由\\w
匹配)或空格或连字符 *
:零次或多次 +
:一次或多次 那这个呢?
^[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
$
哦! 我爱我一些正则表达!
这会有用吗? /^[az]$|^[az](?:_(?=[^ ]))?(?:[az\\d -][^ ]_[^ ])*[az\\d -]*[^_-]$/i
我有点不确定规则4 - 你的意思是下划线可以在之前或之后或之前都有空格,但不是之前和之后?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.