Вместо того, чтобы пытаться использовать Array.split
, может быть лучше сделать какой-нибудь традиционный символьный анализ строки.Так как мы знаем, какой индекс мы ищем, мы можем просто посмотреть начало и конец предложения.
Как заканчивается предложение?Обычно с .
, !
или ?
- зная это, мы можем проверить эти символы и решить, какую часть строки мы должны вырезать и вернуть обратно в программу.Если перед выбранным нами индексом нет sentence enders
(ae ?!. ), мы предполагаем, что начало строки является началом текущего предложения (0) - мы делаем то же самое после выбранногоиндекс, за исключением того, что мы присваиваем str.length
, если после индекса нет конечного предложения.
let str = "Dana's places, we're having people coming to us people wanna buy condos. They want to move quickly and we're just losing out on a lot of great places. Really what would you say this?";
let getSentence = (ind, str) => {
let beg, end, flag, sentenceEnder = ["!", ".", "?"];
Array.from(str).forEach((c, c_index) => {
if(c_index < ind && sentenceEnder.includes(c)) {
beg = c_index + 1;
}
if (flag) return;
if (c_index >= ind && sentenceEnder.includes(c)) {
end = c_index;
flag = true;
}
});
end = end || str.length;
beg = beg || 0;
return str.slice(beg, end);
}
console.log(getSentence(10, str));
console.log(getSentence(80, str));