Регулярное выражение для строки

115
16 декабря 2020, 07:00

Мне нужна строка в JavaScript, которая может содержать одно или более слов, начинающаяся с буквы. Каждое слово может содержать цифры,буквы, тире и подчеркивание между соседними буквами/цифрами. Слова не должны начинаться и заканчиваться тире или подчеркиванием. В конце строки допустимы пробелы. Первое слово обязательно начинается с буквы и может быть длинною 1 или более.

Пока я пришел к следующему

/^[a-zA-Z]+( [a-zA-Z0-9\-\_]*)*[a-zA-Z0-9]+$/

Но оно не работает как мне нужно, к сожалению. В частности, выражение типа a s--5__f тоже пройдет тест.

Answer 1

Вы можете использовать

/^[a-zA-Z][a-zA-Z0-9]*(?:[-_][a-zA-Z0-9]+)*(?:\s[a-zA-Z0-9]+(?:[-_][a-zA-Z0-9]+)*)*\s*$/

См. демо выражения онлайн.

Подробности

  • ^ - начало строки
  • [a-zA-Z] - буква
  • [a-zA-Z0-9]* - 0 и более букв и цифр
  • (?:[-_][a-zA-Z0-9]+)* - 0 и более повторов дефиса или знака подчёркивания, за которыми следует 1 и боле букв/цифр
  • (?:\s[a-zA-Z0-9]+(?:[-_][a-zA-Z0-9]+)*)* - 0 и более повторов...
    • \s - пробельный символ
    • [a-zA-Z0-9]+ - 1+ букв/цифр
    • (?:[-_][a-zA-Z0-9]+)* - 0 и более повторов дефиса или знака подчёркивания, за которыми следует 1 и боле букв/цифр
  • \s* - 0 и более пробельных символов
  • $ - конец строки.

Пример кода:

var strs = ['fdf sdf-sdf-sdf fsd_sd_sdf sd-sd 13', 'dv d_d-dv 1_', 'sdsv d vs_dd 3-']; 
var reg = /^[a-zA-Z][a-zA-Z0-9]*(?:[-_][a-zA-Z0-9]+)*(?:\s[a-zA-Z0-9]+(?:[-_][a-zA-Z0-9]+)*)*\s*$/; 
for (var s of strs) { 
  if (reg.test(s)) { 
    console.log(s, '=>', true) 
  } else { 
    console.log(s, '=>', false) 
  } 
}

READ ALSO
Передача аргумента

Передача аргумента

Делаю небольшую вебморду для управления своим VPN сервером на Flask'е, с js знаком лишь слегка и битый час пытаюсь сделать так, чтобы можно было...

121
как удалить кнопкой мыши элемент li?

как удалить кнопкой мыши элемент li?

мне нужно по нажатию лкм на выбранный элемент li его удалить, а следующий элемент встал на место удаленного

137
Отображение сайта

Отображение сайта

Когда открываю сайт напрямую, то все хорошо работает(скриншот 1), слайдер исправен, аккордеон открывается, НО как только я открываю сайт через...

111
Как создать файл css в intellij idea community edition?

Как создать файл css в intellij idea community edition?

Как создать файл css в intellij idea community edition?его просто нету во вкладке добавить

233