JavaScript RegEx - 带有通配符的最小字符

时间:2016-04-26 19:55:24

标签: javascript regex

我正致力于匹配通配符搜索输入。它是一个名字字段。 以下是我需要匹配的条件。

  1. 如果用户选择进行通配符搜索,则必须输入至少3个字母数字字符
  2. 用户可以/不可以在字符串的开头或结尾输入通配符,但它可以位于任意一侧。
  3. 在单词之间留出空格。
  4. 我想提一下,我在做一场比赛之前修剪了这个字符串。这是我到目前为止所尝试的。

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

    Regular expression visualization

    Debuggex Demo

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

    • 某人xxx,某人xxx yyy - 通过
    • 某人* xxx-失败
    • 某人,某人 - 通过

    这是我想要的最接近的匹配 - 但是这些测试用例都失败了。

    • AB asf * - 失败,这将传递 - ABC asf *

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

    我知道我的条件是 - 从至少3个字母数字字符开始,重复空格和字母数字字符。

    我需要帮助的地方。

    感谢。

3 个答案:

答案 0 :(得分:1)

UPDATE2 此模式应该:

/^([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 101 DEMO.

答案 1 :(得分:0)

试试这个:

[^\W_]

注意:使用\w代替{{1}},就像使用原始正则表达式一样。

regex101

但是,我认为使用正则表达式无法以干净的方式解决此任务。也许正确的javascript函数会更具可读性。

答案 2 :(得分:0)

如果我理解正确的要求,
这可能会奏效。它在我的测试中确实。

^(?:\*[^\W_]{3,}(?:\s*[^\W_]\s*)*|(?:\s*[^\W_]\s*)*[^\W_]{3,}\*|(?:\s*[^\W_]\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