簡體   English   中英

正則表達式在下划線之前和之后匹配字符

[英]Regex match character before and after underscore

我必須寫一個正則表達式匹配以下:

  • 字符串應以字母開頭 - [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 -]*$

請參閱正則表達式演示

說明

  • ^ - 字符串的開頭
  • (?!.*(?:[_-]$|_ | _)) - 在某些字符( .* )之后不得出現( (?!...) )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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM