#javascript #regex
#javascript #регулярное выражение
Вопрос:
У меня есть следующее регулярное выражение JavaScript. Мне интересно, есть ли способ упростить или улучшить его.
Вот мое существующее регулярное выражение, которое не проверяет наличие новых строк или начало строки:
/([^0-9a-z =%$#?!amp;<>;()@* -,./{}^[]\] )$/
Вот что я пробовал, поскольку слова состоят только из букв и символов подчеркивания, но в нем говорится, что новые строки допустимы, как и специальные символы.
/bw[^a-z0-9n] b/
Я пытаюсь использовать слова только с заглавными буквами и символами подчеркивания, с символами подчеркивания только после буквы alpha.
Допустимый ввод будет:
ERIS_TEST_GROUP_NAME
JENNIFER_AD_GROUP_NAME
PSEUDO_TEST_TEAM
TEST_GROUP
Недопустимым вводом может быть все, что содержит новые строки или специальные символы, символы нижнего регистра или начинается с подчеркивания:
_JEN_TEST_GROUP
234*((_amp;amp;*^
ab^*(_EWRR)
e_RERE_^amp;)(*$#$#@()\
Комментарии:
1. Может быть:
/^[A-Z] (?:_[A-Z] )*$/
2. «Слова с верхним регистром» -> это допустимо? wordWithuppercase
3. В моей ситуации регистр верблюда недопустим. Похоже, шаблон @anubhava довольно близок к тому, что мне нужно.
4.
ERIS_TEST_GROUP_NAME_
Допустимо?5. Если я правильно понял, я попробовал /^[A-Z] ?_([A-Z] ?_)*[A-Z] ?$/, в котором вы можете увидеть, чему он соответствует, а чему нет regex101.com/r/RDrph9/1
Ответ №1:
То, что у вас было близко,
w соответствует только одному символу.
Если вы хотите сопоставить более одного, вы можете сделать это с помощью ‘ ‘
/bw [^a-z0-9n] b/
[A-Z] будет соответствовать более чем одному символу верхнего регистра
итак, вы могли бы попробовать что-то вроде этого:
/b[A-Z] (_[A-Z] )*b/
Ответ №2:
Глядя на то, что вы попробовали, я думаю, что вы, возможно, захотите протестировать многострочный ввод. Если это так, вы можете попробовать:
^(?=.)(?:n?[A-Z] (?:_[A-Z] )*) $
Смотрите онлайн-демонстрацию
^
— Начать привязку строки.(?=.)
— Позитивный взгляд на символ, отличный от новой строки.(?:
— Откройте 1-ю группу без захвата.n?
— Необязательный символ новой строки.[A-Z]
— Любая заглавная буква альфа хотя бы один раз.(?:
— Откройте 2-ю группу без захвата._[A-Z]
— Подчеркивание, за которым следует хотя бы одна заглавная буква.)*
— Закройте 2-ю группу без захвата и сопоставьте ее с нулем или более.
)
— Закройте 1-ю группу захвата и сопоставьте ее хотя бы один раз.
$
— Конец струнного якоря.
А если нет, то я думаю, вам следует выбрать вариант, упомянутый в комментариях @Anubhava
Ответ №3:
Используйте
^[A-Z] (?:_[A-Z] )*(?:n[A-Z] (?:_[A-Z] )*)*$
Смотрите Доказательство
Объяснение:
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
[A-Z] any character of: 'A' to 'Z' (1 or more
times (matching the most amount possible))
--------------------------------------------------------------------------------
(?: group, but do not capture (0 or more times
(matching the most amount possible)):
--------------------------------------------------------------------------------
_ '_'
--------------------------------------------------------------------------------
[A-Z] any character of: 'A' to 'Z' (1 or more
times (matching the most amount
possible))
--------------------------------------------------------------------------------
)* end of grouping
--------------------------------------------------------------------------------
(?: group, but do not capture (0 or more times
(matching the most amount possible)):
--------------------------------------------------------------------------------
n 'n' (newline)
--------------------------------------------------------------------------------
[A-Z] any character of: 'A' to 'Z' (1 or more
times (matching the most amount
possible))
--------------------------------------------------------------------------------
(?: group, but do not capture (0 or more
times (matching the most amount
possible)):
--------------------------------------------------------------------------------
_ '_'
--------------------------------------------------------------------------------
[A-Z] any character of: 'A' to 'Z' (1 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
)* end of grouping
--------------------------------------------------------------------------------
)* end of grouping
--------------------------------------------------------------------------------
$ before an optional n, and the end of the
string