Определить порядок объединенного массива в Javascript - PullRequest
0 голосов
/ 27 мая 2020

Я использую Node.js, у меня есть этот код, который принимает duration в качестве ввода от пользователя в формате d/h/m/s. (правда, не все они должны присутствовать, разрешены только эти буквы). RegExp match() используется для разделения строки duration на Nd, на N дней Nh на N часов, Nm на минуты и Ns на N секунд.

duration = '1h30m';
if (!(/[^dhms0-9]/ig).test(duration)) {
   duration = duration.match(/\d+[dhms]/gi);
   console.log(duration); // returns ['1h','30m']
   // what I'm asking for
   // Conditional statements that take care of the time assignments...

Я хочу определить, имеет ли длительность ввода (если предусмотрено) элемент d как 1-й, 2-й - h, затем m, затем s, так что если duration = '30m1h' он возвращает false.

1 Ответ

1 голос
/ 27 мая 2020

Использует ^ $ для соответствия полной строке и? необязательный оператор. Вы хотели использовать find, а не indexOf.

duration = '1h30m';
if (/^(\d+d)?(\d+h)?(\d+m)?(\d+s)?$/i.test(duration)) {
   duration = duration.match(/\d+[dhms]/gi);
   console.log(duration.find(x=>/[0-9]h/.test(x))); // returns ['1h','30m']
   // what I'm asking for
   // Conditional statements that take care of the time assignments...
   
}

duration = '30m1h';
if (/^(\d+d)?(\d+h)?(\d+m)?(\d+s)?$/i.test(duration)) {
   duration = duration.match(/\d+[dhms]/gi);
   console.log(duration.indexOf(/[0-9]h/)); // returns ['1h','30m']
   // what I'm asking for
   // Conditional statements that take care of the time assignments...
   
} else console.log('rejected')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...