RegEx用于单个星号(*)和字母数字

问题描述 投票:2回答:4

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

火柴

*
abc
*abc
abc*
a*bc

无效的匹配

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

我有

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

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

javascript regex
4个回答
3
投票

您可以使用此正则表达式为负前瞻:

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

Updated RegEx Demo

如果输入中有多个(?!(?:.*\*){2}),那么否定前瞻*就会失败。


0
投票

你可以这样做:

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

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

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

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

0
投票

你想要一个匹配两种可能的情况之一:

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

那么这就是你的正则表达式:

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.