我正致力于匹配通配符搜索输入。它是一个名字字段。 以下是我需要匹配的条件。
我想提一下,我在做一场比赛之前修剪了这个字符串。这是我到目前为止所尝试的。
^[^\W_](\s?\w?)*$|^[^\W_]{3,}(\s?\w?)*\*$|^[\*][^\W_]{3,}(\s?\w?)*$
以下是我尝试过的一些例子 -
这是我想要的最接近的匹配 - 但是这些测试用例都失败了。
AB asf * - 失败,这将传递 - ABC asf *
* AB asf - 失败,这将通过 - * ABC asf
我知道我的条件是 - 从至少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
答案 1 :(得分:0)
试试这个:
[^\W_]
注意:使用\w
代替{{1}},就像使用原始正则表达式一样。
但是,我认为使用正则表达式无法以干净的方式解决此任务。也许正确的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