[英]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.