Вы можете начать с RegExp и сравнивать его с идущими символами за символами и сравнивать коды ascii.Разделение - это еще один способ (только что опубликованный выше).
Решение RegExp
function getTextUpToPunc( text ) {
const regExp = /^.+(\!|\?|\.)/mg;
for (let match; (match = regExp.exec( text )) !== null;) {
console.log(match);
}
}
getTextUpToPunc(
"what a chunky funky monkey! this is really someting else"
)
Ключевое преимущество заключается в том, что вам не нужно перебирать всю строку и удерживать контроль над итерацией с помощьюделать regExp.exec( text )
.
Решение split
, опубликованное ранее, будет работать, но split будет проходить по всей строке.Как правило, это не будет проблемой, но если ваши строки состоят из тысяч и тысяч символов, и вы много делаете эту операцию, имеет смысл подумать о производительности.
И если эта функция будет выполняться много-много разНебольшое улучшение производительности будет заключаться в запоминании создания RegExp:
const regExp = /^.+(\!|\?|\.)/mg;
Примерно так:
function getTextUpToPunc( text ) {
if( !this._regExp ) this._regExp = /^.+(\!|\?|\.)/mg;;
const regExp = this._regExp;
for (let match; (match = regExp.exec( text )) !== null;) {
console.log(match);
}
}