繁体   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