Регулярное выражение для соответствия слову, содержащему ТОЛЬКО одно двоеточие

Я новичок в регулярном выражении, в основном я хотел бы проверить, есть ли в слове ТОЛЬКО одно двоеточие или нет.

Если есть два или более двоеточия, он ничего не вернет. если есть одно двоеточие, верните как есть. (двоеточие должно быть в середине строки, а не в конце или начале.

(1)

a:bc:de  #return nothing or error.
a:bc    #return a:bc

a.b_c-12/:a.b_c-12/ #return a.b_c-12/:a.b_c-12/

(2)

Я так думаю, но это кажется слишком сложным.

^[^:]*(\:[^:]*){1}$
^[-\w./]*:[-\w/.]*   #this will not throw error when there are 2 colons.

Любые направления будут полезны, спасибо!

Должно быть просто ^[^:]+:[^:]+$ - что угодно, кроме двоеточия (повторяется), двоеточие, что угодно, кроме двоеточия (повторяется), закрепленное на обоих концах.

jasonharper 09.04.2022 04:44

На каком языке/среде вы будете реализовывать искомое решение?

mickmackusa 10.04.2022 06:40

@jasonharper Пожалуйста, не нарушайте намеренно простой дизайн страницы этого сайта вопросов и ответов, публикуя советы по решению проблемы в качестве комментария к вопросу.

mickmackusa 10.04.2022 06:44
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
39
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я увидел в этом хорошую возможность освежить свои навыки регулярных выражений - так что это может быть не оптимально, но короче вашего последнего решения.

Это шаблон регулярного выражения: /^[^:]*:{1}[^:]*$/gm и это строки, которые я тестирую: 'oneco:on' (совпадение) и 'one:co:on', 'oneco:on:', ':oneco:on' (все они не должны совпадать)

Чтобы объяснить, что происходит, ^ соответствует началу строки, а $ соответствует концу строки.

Бит [^:] говорит, что любой символ, который является нет двоеточием, будет совпадать.

Таким образом, ^[^:] означает, что первый символ строки может быть любым кроме для двоеточия, *:{1} означает, что любое количество символов может идти после двоеточия Один (отсюда и 1). Наконец, [^:]*$ означает, что любое количество (*) символов может следовать за двоеточием, если Oни не является двоеточием.

Чтобы уточнить, это потому, что мы указываем шаблон для поиска в начале и конце строки, окружая одиночное двоеточие, которое мы ищем, только первая строка 'oneco:on' является совпадением.

Просто двоеточие : будет работать точно так же, как :{1}!

Poul Bak 10.04.2022 02:50
Ответ принят как подходящий

Это найдет такие «слова» в большом предложении:

(?<= |^)[^ :]+:[^ :]+(?= |$)

См. живая демонстрация.

Если вы просто хотите проверить весь ввод:

^[^ :]+:[^ :]+$

Чтобы ограничиться только буквенно-цифровыми символами, подчеркиванием, тире, точками и косой чертой:

^[\w./-]+:[\w./-]+$

Спасибо! ^[^ :]+:[^ :]+$ это работает. Но что, если я хочу, чтобы повторялись только цифры, буквы, тире, подчеркивание, точка, а не другие символы. Думаю, это сработает ^[^:][-\w._]*+:[^:]+$

Xiaolong 09.04.2022 07:12

@Xiaolong см. отредактированный ответ. Примечание: \w включает подчеркивание. В вашем примере были косые черты, поэтому я их тоже добавил.

Bohemian 09.04.2022 08:33

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