我需要一个javascript正则表达式,它接受任何字母数字字符(如果存在星号,可以是任意数量的字符或0个字符)和字符串中任何位置的单个星号(但它不需要星号)。
火柴
*
abc
*abc
abc*
a*bc
无效的匹配
**
*_abc
*abc*
abc**
**abc
我有
^([A-Za-z\d*]?)+$
但这匹配多个星号,我不知道如何只允许一个https://regex101.com/r/a1C9bf/1
您可以使用此正则表达式为负前瞻:
/^(?!(?:.*\*){2})[A-Za-z\d*]+$/gm
如果输入中有多个(?!(?:.*\*){2})
,那么否定前瞻*
就会失败。
你可以这样做:
^(?=.)[A-Za-z\d]*\*?[A-Za-z\d]*$
这将匹配任何字符串,该字符串至少有一个字符长((?=.)
),以零个或多个字母数字字符开头,包含可选的*
,并以零个或多个字母数字字符结尾。
您也可以用[A-Za-z\d]
替换[^\W_]
以使其更短(但稍微难以阅读):
^(?=.)[^\W_]*\*?[^\W_]*$
你想要一个匹配两种可能的情况之一:
那么这就是你的正则表达式:
^([a-zA-Z\d]*\*[a-zA-Z\d]*|[a-zA-Z\d]+)$
无需任何预见,你可以使用^([\da-zA-Z]+|[\da-zA-Z]*\*[\da-zA-Z]*)$
https://regex101.com/r/xW2IvR/2