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

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

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

(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
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
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

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