RegEx для одной звездочки (*) и буквенно-цифровой - PullRequest
2 голосов
/ 30 апреля 2019

Мне нужно регулярное выражение javascript, которое принимает любой буквенно-цифровой символ (может быть любым количеством символов или 0 символов, если присутствует звездочка) и одну звездочку в любом месте строки (но звездочка не требуется).

Спички

*
abc
*abc
abc*
a*bc

Недопустимые совпадения

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

У меня есть

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

но это соответствует нескольким звездочкам, и я не уверен, как разрешить только одну https://regex101.com/r/a1C9bf/1

Ответы [ 4 ]

3 голосов
/ 30 апреля 2019

Вы можете использовать это регулярное выражение с отрицательным прогнозом:

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

Обновленная демоверсия RegEx

Отрицательный прогноз (?!(?:.*\*){2}) не дает совпадения, если их большеодин * на входе.

0 голосов
/ 30 апреля 2019

Требуется одно совпадение в одном из двух возможных случаев:

  1. звездочка, заключенная в ноль или более буквенно-цифровых символов
  2. один или несколько буквенно-цифровых символов

Тогда это ваше регулярное выражение:

^([a-zA-Z\d]*\*[a-zA-Z\d]*|[a-zA-Z\d]+)$
0 голосов
/ 30 апреля 2019

Не требуя предварительного просмотра, вы можете использовать ^([\da-zA-Z]+|[\da-zA-Z]*\*[\da-zA-Z]*)$ https://regex101.com/r/xW2IvR/2

0 голосов
/ 30 апреля 2019

Вы можете сделать:

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

Это будет соответствовать любой строке длиной не менее одного символа ((?=.)), начинающейся с нуля или более буквенно-цифровых символов, содержащей необязательный *, изаканчивается нулем или более буквенно-цифровыми символами.

Вы также можете заменить [A-Za-z\d] на [^\W_], чтобы сделать его немного короче (но немного сложнее для чтения):

^(?=.)[^\W_]*\*?[^\W_]*$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...