Выражение регулярного выражения для замены символов между двумя вариантами - PullRequest
2 голосов
/ 15 марта 2019

Я пытаюсь создать элегантное регулярное выражение для замены следующей строки:

12:00:00 a. m. к этому: 12:00 AM

или также заменить: 12:00:23 a.m. до 12:00 am

Я имею в виду, я хочу удалить последние: :00 и заменить a. m. на AM

Это то, что я думал (но отсутствует):

"12:00:00 a. m.".replace(/(:*)?(.*\s)/, "");

Большое спасибо за помощь :)

Ответы [ 3 ]

2 голосов
/ 15 марта 2019

Вы можете использовать это регулярное выражение с двумя группами захвата, чтобы сделать это в одном replace:

/:\d\d\s*(\w)\.?\s*(\w)\.?/

const func = str => str.replace(/:\d\d\s*(\w)\.?\s*(\w)\.?/, (a, b, c) => {
  return ` ${b}${c}`.toUpperCase();
});

console.log(func('12:12:34 a. m.'));
console.log(func('12:34:56 a.m.'));
console.log(func('12:12:34 pm'));
console.log(func('12:34:56pm'));
console.log(func('12:34:56p.   m'));
1 голос
/ 15 марта 2019

Я предполагаю, что вы здесь не проводите никакой проверки.Таким образом, два цепных метода raplece() будут выполнять свою работу:

str.replace(/^(.*):\d+/, '$1')
    .replace(/([a-z])[. ]*/g, ($0, $1) => $1.toUpperCase())

Выше работает для p. m. или pm.

ES5:

console.log("12:00:00 a. m.".replace(/^(.*):\d+/, '$1')
        .replace(/([a-z])[. ]*/g, function($0, $1) { return $1.toUpperCase(); }))
1 голос
/ 15 марта 2019

Отчасти это зависит от того, насколько общим вы хотите быть, но, похоже, это работает:

function replaceTime(str) {
  return str.replace(/(\d{2}:\d{2}):\d{2}/, "$1")
            .replace(/\s*a\.*\s*m\.*/, " AM");
}
console.log(replaceTime("12:00:00 a. m."));
console.log(replaceTime("12:00:23 a.m"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...