#javascript #regex
Вопрос:
Я пытаюсь удалить все, кроме соответствующего шаблона, используя .replace()
функцию javascripts и регулярное выражение.
Я хочу сохранить цифры из поля «дата», т. е. 11 10 2021 или 9 10 2021. Это регулярное /[d]{1,2} [0-9]{2} [0-9]{4}/g
выражение соответствует шаблонам дат, однако при использовании .replace(regex, '')
оно заменяет эти цифры, а не сохраняет их. Мне просто интересно, как «перевернуть» шаблон, чтобы сохранить цифры и заменить все остальное.
Примеры строк:
SURVEY API RESULT LANDING: [{"_id":"616392e41a03eed562de2e8a",
"userId":"email@gmail.com",
"date":"11 10 2021",
"timeStamp":"2:26:",
"formResponse":"Survey completed"}]
[{"_id":"616392e41a03eed562de2e8a",
"userId":"email@gmail.com",
"date":"9 10 2021",
"timeStamp":"2:26:",
"formResponse":"Survey completed"}]
Комментарии:
1. Похоже, было бы намного проще просто разобрать JSON и извлечь
date
поля.2. Я бы сделал это, если бы мог — это скорее упражнение в регулярном выражении, чем что-либо еще
3. Почему бы просто не использовать результат
String.prototype.match(regex)
?
Ответ №1:
Чтобы найти одну дату, попробуйте выполнить следующие действия
`[{"_id":"616392e41a03eed562de2e8a",
"userId":"email@gmail.com",
"date":"9 10 2021",
"timeStamp":"2:26:",
"formResponse":"Survey completed"}]`.replace(/.*([d]{1,2} [0-9]{2} [0-9]{4}).*/gms, "$1");
Ссылка на регулярное выражение https://javascript.info/regexp-introduction
Комментарии:
1. Спасибо! Я согласился с этим, но добавил»? «после первого»*», так как первая цифра многозначной даты отсекалась. Таким образом, полученное регулярное выражение является:
/.*?([d]{1,2} [0-9]{2} [0-9]{4}).*/g
2. Пока вам нужно только соответствовать 1, это работает, хотя, как предположил @MrMythical,
str.match(/[d]{1,2} [/d]{2} [/d]{4}/)?.[0];
в этом случае было бы более прямолинейно. Вместо сопоставления полной строки и использования группы захвата.
Ответ №2:
Используйте регулярное выражение exec или строку matchAll вместо замены строки
выполнение
const regex = /[d]{1,2} [d]{2} [d]{4}/g;
const str = `SURVEY API RESULT LANDING: [{"_id":"616392e41a03eed562de2e8a",
"userId":"email@gmail.com",
"date":"11 10 2021",
"timeStamp":"2:26:",
"formResponse":"Survey completed"}]
[{"_id":"616392e41a03eed562de2e8a",
"userId":"email@gmail.com",
"date":"9 10 2021",
"timeStamp":"2:26:",
"formResponse":"Survey completed"}]`;
let match;
while(match = regex.exec(str)) {
console.log(match[0]);
}
Матчалл
const iterator = `SURVEY API RESULT LANDING: [{"_id":"616392e41a03eed562de2e8a",
"userId":"email@gmail.com",
"date":"12 10 2021",
"timeStamp":"2:26:",
"formResponse":"Survey completed"}]
[{"_id":"616392e41a03eed562de2e8a",
"userId":"email@gmail.com",
"date":"9 10 2021",
"timeStamp":"2:26:",
"formResponse":"Survey completed"}]`.matchAll(/[d]{1,2} [d]{2} [d]{4}/g);
console.log(Array.from(iterator).map(m => m[0]));