我想補充一點,不使用正則表達式的答案分割 字符串,因爲這樣做效率很低,並且可能會在較大的文本塊上非常緩慢。
最有效的方法可能是使用幾個循環進行搜索,只需要2遍就可以找到句子的結尾。
var sentenceFromPos = function (s, pos) {
var len = s.length,
start,
end,
char;
start = pos;
end = pos;
while (start >= 0) {
char = s.charAt(start);
if (char === '.' || char === '?' || char === '!') {
break;
}
start -= 1;
}
while (end < len) {
char = s.charAt(end);
if (char === '.' || char === '?' || char === '!') {
break;
}
end += 1;
}
return s.substring(start + 1, end + 1).trim();
};
var phrase = 'This is the first sentence. And this is the second! Finally, this is the third sentence';
console.log(sentenceFromPos(phrase, 10));
console.log(sentenceFromPos(phrase, 33));
console.log(sentenceFromPos(phrase, 53));
只需按'。?!'分割並添加長度,直到獲得長度> =當前位置。 – ndn
試試[這個演示](http://jsfiddle.net/qqzssoyv/) - 它是你在找什麼? –
@stribizhev完美......我也覺得有點愚蠢,因爲沒有意識到解決方案一開始就有多簡單。無論如何,如果你想將它寫成答案,我會獎勵給你。 – Gordo