Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式匹配下划线前后的字符_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式匹配下划线前后的字符

Javascript 正则表达式匹配下划线前后的字符,javascript,regex,Javascript,Regex,我必须编写带有以下匹配项的正则表达式: 字符串应以字母-[a-zA-Z]开头 字符串可以包含字母、空格、数字、\uu和-(下划线和连字符) 字符串不应以\uuu或-结尾(下划线和连字符) 下划线字符前后不应有空格 我提出了下面的正则表达式,但它似乎不起作用 /^[a-zA-Z0-9]+(\b_|_\b)[a-zA-Z0-9]+$/ 测试用例: HelloWorld // Match Hello_World //Match Hello _World // doesn't match Hell

我必须编写带有以下匹配项的正则表达式:

  • 字符串应以字母-[a-zA-Z]开头
  • 字符串可以包含字母、空格、数字、
    \uu
    -
    (下划线和连字符)
  • 字符串不应以
    \uuu
    -
    结尾(下划线和连字符)
  • 下划线字符前后不应有空格
我提出了下面的正则表达式,但它似乎不起作用

/^[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-z]$|^[a-z](?:。=[^]))?(?:[a-z\d-][^].[^])*[a-z\d-]*[^.-]$/i

我有点不确定规则4——你的意思是下划线可以在前面或后面有空格,还是两者都没有,但不能在前面和后面有空格?

这是怎么回事

^[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
$
你可以用

^(?!.*(?:[_-]$|_ | _))[a-zA-Z][\w -]*$

说明:

  • ^
    -字符串的开头
  • (?!!*(:[[u-]$$\ u124;))
    -在一些字符(
    *
    )之后,不能出现(
    (?!…)
    )字符串末尾(
    [[u-]$
    )的
    -
    )或空格+
    +空格
  • [a-zA-Z]
    -匹配和使用的第一个字符必须是ASCII字母
  • [\w-]*
    -0+字(
    \w
    =
    [a-zA-Z0-9\]
    )字符或空格或
    -
  • $
    -字符串结尾

    • 您可以使用这个:

      ^(?!^[ _-]|.*[ _-]$|.* _|.*_ )[\w -]*$
      

      对于测试用例,我使用modifier
      gm
      分别匹配每一行

      如果不应认为emtpy字符串是可接受的,则将最终的
      *
      更改为
      +

      ^(?!^[ _-]|.*[ _-]$|.* _|.*_ )[\w -]+$
      
      每个部分的含义
      • ^
        $
        匹配输入的开始/结束
      • (?!)
        :不应匹配的内容列表:
        • |
          :逻辑或
        • ^[-]
          :以这三个字符中的任何一个开头
        • *[\u-]$
          :以这三个字符中的任何一个结尾
        • *.
          :空格后跟下划线
        • *.
          :下划线后跟空格
      • [\w-]
        :任何字母数字字符或下划线(也与
        \w
        匹配)或空格或连字符
      • *
        :零次或多次
      • +
        :一次或多次


      这种情况下的第一步:使用所需的输出构建测试字符串数组。这既可以让其他正则表达式更清晰,也可以让您自动测试任何正则表达式。“但它似乎不起作用”您还可以用正则表达式发布给出错误答案的字符串吗?请尝试
      /^[a-zA-Z][a-zA-Z0-9\-]+[a-zA-Z0-9]$/
      这还不清楚:第4个条件没有意义,因为前3个条件意味着字符串中根本没有空格。我会使用
      ^[a-zA-Z][a-zA-Z0-9_-]*[a-zA-Z0-9]$
      ,或者,如果需要匹配1个字符输入,
      ^(?!*[[u-]$)[a-zA-Z][a-zA-Z0-9_-]*$
      “字符串应该以alpabets开头”首先是:
      [a-zA-Z0-9]
      。。。你需要更多的思考。下划线在前后都没有空间好的,我只是想非常清楚你需要什么。有4种可能性(忽略引号字符,问号用于任何非空格字符):1)“?”2)“?”3)“?”4)“?”哪些是可以接受的?好的。所以我的正则表达式应该有用。你能把你测试这个的字符串放到原始的帖子里吗?(或者,如果它们真的很长,很复杂,就拿出一些我们可以用来调试的例子)两个问题:中间好像有一个管道漏掉了,这个正则表达式拒绝单字符输入,比如<代码> a <代码>。好的,我增加了对单个字符的支持。我不知道你所说的烟斗丢失是什么意思。很有魅力。谢谢,我知道我错过了什么。干杯:)允许角色和要求角色之间有区别。这个正则表达式的开头需要一个字符,结尾需要另一个字符,这意味着它不会匹配单个字符输入,比如
      a
      @pallingh:只是为了确定:
      Hello\uworld
      Z
      输入的预期行为是什么?还有一个小问题:空字符串呢?是的,是一个失败的情况。我如何匹配它?@PalSingh:看我的答案,和我的答案相似,但允许一个空字符串。事实上,这是一个解释问题。我添加了一个
      +
      变体。我现在看到您比我早一分钟就到了:-),至于匹配空字符串,可以使用这个小mod(在模式的消费部分有一个可选组:。满足所有测试用例。谢谢