разбор строк в JavaScript
Задача: Есть текст. В этом тексте надо найти первое предложение до первой точки. Если нет ни одной точки, то надо возвратить целый текст? Как это реализовать в JS? Делаю так, но как-то не получается
const partContent = this.content.split('.')[0] + ".";
Ответы (2 шт):
Автор решения: Ivan Didyk
→ Ссылка
Регулярные выражения в помощь:
const firstSentence = (this.content.match(/^.+\./) || [this.content])[0];
Автор решения: entithat
→ Ссылка
const partContent = content => {
// Делим на части
const part = content.split(/[.?!]/)[0];
// Добавляем еще конец предложения (., !, ?)
console.log(part + (content[part.length] || '.'));
// Проверяем на наличие точки
console.log(content[part.length] === '.' ? 'Есть точка.' : 'Нет точки.');
}
partContent('A');
partContent('A. B.');
partContent('A, B?');
partContent('A, B? C');
partContent('A... B.');
P.S. Минус первого подхода в том, что конец предложения (точка или !, ?) могут быть через несколько пробелов и тогда результат будет не ожидаемый. Чтобы это поправить стоит задуматься над использованием регулярных выражений.
Универсальная версия:
const partContent = content => {
const part = content.match(/^([^.!?]+)([.!?]*)/);
console.log(part[1] + (part[2] || '.'), part[2] === '.' ? 'Есть точка.' : 'Нет точки.');
}
partContent('A');
partContent('A. B.');
partContent('A, B?');
partContent('A, B? C.');
partContent('A... B.');
partContent('A!? B...');
partContent('A!!! B.');