JavaScript正则表达式-带通配符的最小字符数
我正在努力匹配通配符搜索输入。这是一个名称字段。 以下是我需要匹配的条件JavaScript正则表达式-带通配符的最小字符数,javascript,regex,Javascript,Regex,我正在努力匹配通配符搜索输入。这是一个名称字段。 以下是我需要匹配的条件 如果用户选择进行通配符搜索,则必须输入至少3个字母数字字符 用户可以/不可以在字符串的开头或结尾输入通配符,但可以在任意一侧输入 在单词之间留出空格 我想说的是,我在比赛前正在修剪绳子。这就是我到目前为止所尝试的 ^[^\W_](\s?\w?)*$|^[^\W_]{3,}(\s?\w?)*\*$|^[\*][^\W_]{3,}(\s?\w?)*$ 下面是我尝试过的一些例子- 某人xxx,某人xxx yyy-通过 某
^[^\W_](\s?\w?)*$|^[^\W_]{3,}(\s?\w?)*\*$|^[\*][^\W_]{3,}(\s?\w?)*$
下面是我尝试过的一些例子-
- 某人xxx,某人xxx yyy-通过
- 某人*xxx-失败
- 有人,有人通过了
- AB asf*--失败,将通过-ABC asf*
- *AB asf——失败,将通过-*ABC asf
^(?:[^\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