我需要一个javascript正则表达式,它可以接受任何字母数字字符(如果存在星号,则可以是任意数量的字符或0个字符),并且可以在字符串中的任意位置使用一个星号(但不需要星号)。
比赛
*
abc
*abc
abc*
a*bc
无效匹配
**
*_abc
*abc*
abc**
**abc
我有
^([A-Za-z\d*]?)+$
但是匹配多个星号,我不确定如何只允许一个https://regex101.com/r/a1C9bf/1
答案 0 :(得分:3)
您可以在负前瞻的情况下使用此正则表达式:
/^(?!(?:.*\*){2})[A-Za-z\d*]+$/gm
如果输入中有多个(?!(?:.*\*){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)
您要匹配两种情况之一:
这是您的正则表达式:
^([a-zA-Z\d]*\*[a-zA-Z\d]*|[a-zA-Z\d]+)$