Все слова в тексте с более чем 1 символом верхнего регистра с регулярным выражением

Как выделить все слова в тексте с более чем 1 заглавными буквами? Мне удалось выделить определенное слово с помощью этой строки:

(?<![a-z])word(?![a-z])

Но я не уверен, как выбрать такие слова, как SElect, SeLeCt, SelecT, seleCT, selEcT.

Сопоставляете ли вы определенное слово с переменным регистром или любую строку символов, содержащую хотя бы одну заглавную букву? Если это последнее, что-то вроде этого будет работать? ^([a-z]*[A-Z]+[a-zA-Z]*)$

Jon Warren 22.12.2020 16:25

Я думаю, что вам нужно /(?<![A-Za-z])(?:[a-z]*[A-Z]){2}[A-Za-z]*(?![A-Za-z])/g, то есть буквенное слово между небуквенными символами, состоящее как минимум из двух заглавных букв.

Wiktor Stribiżew 22.12.2020 16:35

@WiktorStribiżew Спасибо. Это ответ.

Neret 22.12.2020 16:41
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
145
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете использовать шаблон, чтобы утверждать, что справа находится «слово» и сопоставлять 2 символа в верхнем регистре, окруженные необязательными символами в верхнем и нижнем регистре.

(?<![a-zA-Z])[a-z]*[A-Z][a-z]*[A-Z][A-Za-z]*(?![a-zA-Z])

Объяснение

  • (?<![a-zA-Z]) Утверждать не a-zA-Z слева
  • [a-z]*[A-Z] Сопоставьте необязательные символы az, за которыми следует AZ, чтобы соответствовать первому символу в верхнем регистре.
  • [a-z]*[A-Z] Снова сопоставьте необязательные символы az, за которыми следует AZ, чтобы соответствовать второму символу в верхнем регистре.
  • [a-zA-Z]* Сопоставьте необязательные символы a-zA-Z
  • (?![a-zA-Z]) Утверждение не a-zA-Z справа

Демонстрация регулярных выражений

@Neret Все такие слова? (?<![a-z])[a-zA-Z]*[A-Z][a-zA-Z]*[A-Z][a-zA-Z]*(?![a-z])regex101.com/r/bVIsd7/1

The fourth bird 22.12.2020 16:30

Да, все такие слова. Но границы должны быть [a-zA-Z], а не \b.

Neret 22.12.2020 16:32

@Neret (?<![a-zA-Z])[a-zA-Z]*[A-Z][a-zA-Z]*[A-Z][a-zA-Z]*(?![a-zA-Z‌​])regex101.com/r/sNdVBg/1

The fourth bird 22.12.2020 16:33

Да спасибо. Это ответ. Не могли бы вы немного объяснить, как это работает?

Neret 22.12.2020 16:35

Можно ли утверждать хотя бы одну строчную букву в выборе?

Neret 22.12.2020 18:12

Вы - гений! Большое спасибо.

Neret 22.12.2020 18:21

const regex = /([a-z]*[A-Z]|[A-Z][a-z]*){2,}\b/g
const str = "SEEEEect, SeLeCt, SelecT, seleCT, selEcT select, seleCT, selEcT select, donselect"

const match = str.match(regex)
console.info(match)

Позвольте мне также предложить полностью регулярное выражение Unicode:

/(?<!\p{L})(?:\p{Ll}*\p{Lu}){2}\p{L}*(?!\p{L})/gu

Смотрите доказательство.

Объяснение:

--------------------------------------------------------------------------------
  (?<!                     look behind to see if there is not:
--------------------------------------------------------------------------------
    \p{L}                  any Unicode letter
--------------------------------------------------------------------------------
  )                        end of look-behind
--------------------------------------------------------------------------------
  (?:                      group, but do not capture (2 times):
--------------------------------------------------------------------------------
    \p{Ll}*                 any lowercase Unicode letter (0 or more
                             times (matching the most amount possible))
--------------------------------------------------------------------------------
    \p{Lu}                   any uppercase Unicode letter
--------------------------------------------------------------------------------
  ){2}                     end of grouping
--------------------------------------------------------------------------------
  \p{L}*                   any Unicode letter (0 or more
                           times (matching the most amount possible))
--------------------------------------------------------------------------------
  (?!                      look ahead to see if there is not:
--------------------------------------------------------------------------------
    \p{L}                   any Unicode letter
--------------------------------------------------------------------------------
  )                        end of look-ahead

JavaScript:

const regex = /(?<!\p{L})(?:\p{Ll}*\p{Lu}){2}\p{L}*(?!\p{L})/gu;
const string = "SEEEEect, SeLeCt, SelecT, seleCT, selEcT select, seleCT, selEcT select, donselect";
console.info(string.match(regex));

Другие вопросы по теме