正则表达式,用于单个星号(*)和字母数字

时间:2019-04-30 16:58:51

标签: javascript regex

我需要一个javascript正则表达式,它可以接受任何字母数字字符(如果存在星号,则可以是任意数量的字符或0个字符),并且可以在字符串中的任意位置使用一个星号(但不需要星号)。

比赛

*
abc
*abc
abc*
a*bc

无效匹配

**
*_abc
*abc*
abc**
**abc

我有

^([A-Za-z\d*]?)+$ 

但是匹配多个星号,我不确定如何只允许一个https://regex101.com/r/a1C9bf/1

4 个答案:

答案 0 :(得分:3)

您可以在负前瞻的情况下使用此正则表达式:

/^(?!(?:.*\*){2})[A-Za-z\d*]+$/gm

Updated RegEx Demo

如果输入中有多个(?!(?:.*\*){2}),则负超前搜索*将使匹配失败。

答案 1 :(得分:0)

您可以这样做:

^(?=.)[A-Za-z\d]*\*?[A-Za-z\d]*$

这将匹配任何至少一个字符长((?=.)),以零个或多个字母数字字符开头,包含可选的*并以零个或多个字母数字字符结尾的字符串。 / p>

您也可以将[A-Za-z\d]替换为[^\W_],以使其更短(但更难阅读):

^(?=.)[^\W_]*\*?[^\W_]*$

答案 2 :(得分:0)

无需任何前瞻,您可以使用^([\da-zA-Z]+|[\da-zA-Z]*\*[\da-zA-Z]*)$ https://regex101.com/r/xW2IvR/2

答案 3 :(得分:0)

您要匹配两种情况之一:

  1. 由零个或多个字母数字字符包围的星号
  2. 一个或多个字母数字字符

这是您的正则表达式:

^([a-zA-Z\d]*\*[a-zA-Z\d]*|[a-zA-Z\d]+)$