我需要一个JavaScript正则表达式,它接受任何字母数字字符(可以是任意数量的字符,如果存在星号,则可以是0个字符(和字符串中任何地方的单个星号(但它不需要星号(。
比赛
*
abc
*abc
abc*
a*bc
无效匹配项
**
*_abc
*abc*
abc**
**abc
我有
^([A-Za-zd*]?)+$
但这匹配多个星号,我不确定如何只允许一个 https://regex101.com/r/a1C9bf/1
您可以将此正则表达式与负面展望一起使用:
/^(?!(?:.**){2})[A-Za-zd*]+$/gm
更新的正则表达式演示
如果输入中有多个*
,则负前瞻(?!(?:.**){2})
匹配失败。
无需任何预瞻,您可以使用^([da-zA-Z]+|[da-zA-Z]**[da-zA-Z]*)$
https://regex101.com/r/xW2IvR/2
你可以做:
^(?=.)[A-Za-zd]**?[A-Za-zd]*$
这将匹配长度至少为一个字符 ((?=.)
(、以零个或多个字母数字字符开头、包含可选*
并以零个或多个字母数字字符结尾的任何字符串。
您也可以将[A-Za-zd]
替换为[^W_]
,使其更短一些(但更难阅读(:
^(?=.)[^W_]**?[^W_]*$
您希望一种匹配两种可能的情况之一:
- 由零个或多个字母数字字符包围的星号
- 一个或多个字母数字字符
那么这是你的正则表达式:
^([a-zA-Zd]**[a-zA-Zd]*|[a-zA-Zd]+)$