Как игнорировать в регулярном выражении двойные числа?
Есть текст формата: "Задачи:
- Задача, сделать что-то до 28.08.
- Разобраться с замыканиями. "
function disassembleText(text) {
const disassemble = text.replace(/(\d)/g, '\n$1');
const crop = disassemble.trim();
return crop;
};
На выходе получаю текст в формате "
- Задача, сделать что-то до 2
0 8.
- Разобраться с замыканиями.. "
Желаемый результат:
- Задача, сделать что-то до 28.08.
- Разобраться с замыканиями.
Подскажите как возможно игнорировать двойные числа в регулярном выражении?
Ответы (3 шт):
А не надо на двузначные числа ориентироваться. Можно ориентироваться на <цифра> + <точка> + <пробел>.
const disassemble = text.replace(/(\d\.\x20)/g, '\n$1');
Чтобы найти строки, состоящие из только одной цифры, нужно использовать одно из следующих выражений:
\b\d\b
(?<!\d)\d(?!\d)
(?<!\d)(?<!\d[.,])\d(?![.,]?\d)
\b\d\b находит одну цифру, по обеим сторонам которой нет "словных" символов (цифр или букв из набора ASCII или символа нижнего подчёркивания), (?<!\d)\d(?!\d) находит одну цифру, по обеим сторонам которой нет другой цифры, а (?<!\d)(?<!\d[.,])\d(?![.,]?\d) находит одну цифру, исключая совпадения внутри дробных чисел. Какой из этих шаблонов подойдёт именно вам зависит от входных данных и дальнейшего уточнения проблемы.
Пример кода:
function disassembleText(text) {
return text.replace(/\b\d\b/g, '\n$&').trim();
};
const text = "Задачи: 1. Задача, сделать что-то до 28.08. 2. Разобраться с замыканиями.";
console.log(disassembleText(text))
Заметьте, что скобки вокруг целого регулярного выражения не нужны, так как в шаблоне замены ссылка на целое совпадение (а не его часть) задаётся с помощью $&.
См. пример работы регулярного выражения.
Ещё, если вы не хотите найти совпадение в начале текста, добавьте блок предварительного просмотра (?!^): \b(?!^)\d\b (пример).
function disassembleText(text) {
return text.match(/(?:(?<=^|\s)\d+\.\s)?(?:(?!\d+\.\s(?!\d+\.\s)).)+/g)?.join("\n") || text
}
console.log(disassembleText("Задачи: 1. Задача, сделать что-то до 28.08. 2. Разобраться с замыканиями."))
console.log(disassembleText("1. Разработать план мероприятий и ничего не делать. 2. Повторно напиться 'Охоты'. 3. Выполнить какую нить задачу."))
console.log(disassembleText("1. Разработать план мероприятий и ничего не делать."))
console.log(disassembleText("Разработать план мероприятий и ничего не делать."))
console.log(disassembleText("Разработать 2 плана мероприятий 123. и ничего не делать."))
console.log(disassembleText(""))
.as-console-wrapper.as-console-wrapper { max-height: 100vh }