Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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,我正在努力匹配通配符搜索输入。这是一个名称字段。 以下是我需要匹配的条件 如果用户选择进行通配符搜索,则必须输入至少3个字母数字字符 用户可以/不可以在字符串的开头或结尾输入通配符,但可以在任意一侧输入 在单词之间留出空格 我想说的是,我在比赛前正在修剪绳子。这就是我到目前为止所尝试的 ^[^\W_](\s?\w?)*$|^[^\W_]{3,}(\s?\w?)*\*$|^[\*][^\W_]{3,}(\s?\w?)*$ 下面是我尝试过的一些例子- 某人xxx,某人xxx yyy-通过 某

我正在努力匹配通配符搜索输入。这是一个名称字段。 以下是我需要匹配的条件

  • 如果用户选择进行通配符搜索,则必须输入至少3个字母数字字符
  • 用户可以/不可以在字符串的开头或结尾输入通配符,但可以在任意一侧输入
  • 在单词之间留出空格
  • 我想说的是,我在比赛前正在修剪绳子。这就是我到目前为止所尝试的

    ^[^\W_](\s?\w?)*$|^[^\W_]{3,}(\s?\w?)*\*$|^[\*][^\W_]{3,}(\s?\w?)*$
    

    下面是我尝试过的一些例子-

    • 某人xxx,某人xxx yyy-通过
    • 某人*xxx-失败
    • 有人,有人通过了
    这是我想要的最接近的匹配-但是对于这些测试用例它失败了

    • AB asf*--失败,将通过-ABC asf*

    • *AB asf——失败,将通过-*ABC asf

    我知道我有一个条件,说-以至少3个字母数字字符开始,重复空格和字母数字字符

    那就是我需要帮助的地方

    谢谢。

    试试这个:

    ^(?:[^\W_]+|\*[^\W_]{3,}|[^\W_]{3,}\*)(?:\s+(?:[^\W_]+|\*[^\W_]{3,}|[^\W_]{3,}\*))*$
    
    注意:使用
    [^\W\u]
    而不是像在原始正则表达式中一样使用
    \W


    然而,我认为这个任务不能用正则表达式干净地解决。也许一个合适的javascript函数更具可读性。

    如果我正确理解了需求,
    这可能有用。在我的测试中是这样的

    ^(?:*[^\W\uu]{3,}(?:\s*[^\W\u]\ s*)*(?:\s*[^\W\u]\ s*)*[^\W\u]{3,}\*.(?:\s*[^\W\u]\ s*)+)$

    扩大

     ^                             # BOS
     (?:                           # One of either ---
          \*                            # Star at beeginning
          [^\W_]{3,}                    # 3 or more words
          (?: \s* [^\W_] \s* )*         # Any number of word's following spaces
       |                              # or,
          (?: \s* [^\W_] \s* )*         # Any number of word's following spaces
          [^\W_]{3,}                    # 3 or more words
          \*                            # Star at end
       |                              # or, 
          (?: \s* [^\W_] \s* )+         # Any number of word's following spaces
     )                             # ---------
     $                             # EOS 
    

    更新2此模式应执行以下操作:

    /^([a-zA-Z0-9]{3,}[^\n*]*\*?|\*[a-zA-Z0-9]{2,}[^\n*]*|[a-zA-Z0-9]{2}\*)$/gm
    
    说明:

    ^                               # assert start of line
     (                              # 1st capturing group starts         
        [a-zA-Z0-9]{3,}             # match 3+ times alphanumeric characters
                      [^\n*]*       # match 0 or more non-newline and non-star (*) characters
                             \*?    # match 0 or one literal star (*) character;
      |                             # OR
        \*                          # match one literal star (*) character
          [a-zA-Z0-9]{2,}           # match 2+ times alphanumeric characters
                         [^\n*]*    # match 0 or more non-newline and non-star (*) characters;
      |                             # OR
        [a-zA-Z0-9]{2}              # match 2 non-newline and non-star (*) characters
                      \*            # match one literal star (*) character
     )                              # 1st capturing group ends       
    $                               # assert end of line
    

    为什么是正则表达式?验证功能应该很好,Regex可以作为这些情况的干净解决方案,我从中学习,stackoverflow社区总是在那里寻求帮助。-ccf-我将您的答案标记为正确答案。对不起,如果问题中有一些混淆。我将编辑我的问题以添加匹配和不匹配场景。这没有通过*AB Cdcv,对于用户来说,如果他输入AJ S'asteric是一个有效的条目,因为这是3characters@Lucky-你的格式正确吗?这个
    *AB Cdcv
    不匹配(也不应该匹配),而且
    AJ S
    与这个正则表达式匹配。我认为它没有格式化。我想通过这个场景。AB Cdcv,我还举了一个例子来说明,如果用户输入了应该匹配的AJ S。很抱歉,它没有显示星号,是的,我想通过。AJ萨斯特里斯克也应该通过。感谢星号
    *
    是一个格式化字符。使用backticks突出显示.AB asf*这是我需要匹配的,因为总共有3个字符。但条件是,
    至少以3个字母数字字符开始。那么,你的意思是,它还包括空间?另外,特别是,您希望
    AB asf*--失败
    ,对吗?对于问题中的任何混淆,很抱歉,如果用户选择输入通配符,则字符数应至少为3。所以AJ S*就是一个很好的例子。另外,AB asf*这是我的正则表达式中失败的地方,我想通过该场景。谢谢,看起来我们非常接近,但fd c*-匹配*fd c-不匹配这些应该失败,因为如果用户选择使用通配符搜索,他必须输入至少3个字符。99**99*9g*fd