function getWordAt (str, pos) {
// Perform type conversions.
str = String(str);
pos = Number(pos) >>> 0;
// Search for the word's beginning and end.
var left = str.slice(0, pos + 1).search(/\S+$/),
right = str.slice(pos).search(/\s/);
// The last word in the string is a special case.
if (right < 0) {
return str.slice(left);
}
// Return the word, using the located bounds to extract it from the string.
return str.slice(left, right + pos);
}
Эта функция принимает любой символ пробела в качестве разделителя слов, включая пробелы, символы табуляции и символы новой строки. По сути, это выглядит:
- Для начала слова соответствует
/\S+$/
- Сразу за концом слова, используя
/\s/
Как написано, функция вернет ""
, если задан индекс символа пробела; пробелы не являются частью самих слов. Если вы хотите, чтобы функция вместо возвращала предыдущее слово , измените /\S+$/
на /\S+\s*/
.
Вот пример вывода для "This is a sentence."
0: This
1: This
2: This
3: This
4:
5: is
6: is
7:
8: a
9:
10: sentence.
// ...
18: sentence.
Модифицировано для возврата предыдущего слова, вывод становится:
0: This
1: This
2: This
3: This
4: This
5: is
6: is
7: is
8: a
9: a
10: sentence.
// ...
18: sentence.