For string input of 'this is a sentence' it must return 'is' when position is 6 or 7. When position is 0, 1, 2, 3 or 4 result must be 'this'.
What is the easiest way?
For string input of 'this is a sentence' it must return 'is' when position is 6 or 7. When position is 0, 1, 2, 3 or 4 result must be 'this'.
What is the easiest way?
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); } This function accepts any whitespace character as a word separator, including spaces, tabs, and newlines. Essentially, it looks:
/\S+$//\s/As written, the function will return "" if the index of a whitespace character is given; spaces are not part of words themselves. If you want the function to instead return the preceding word, change /\S+$/ to /\S+\s*/.
Here is some example output for "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. Modified to return the preceding word, the output becomes:
0: This 1: This 2: This 3: This 4: This 5: is 6: is 7: is 8: a 9: a 10: sentence. // ... 18: sentence. var str = "this is a sentence"; function GetWordByPos(str, pos) { var left = str.substr(0, pos); var right = str.substr(pos); left = left.replace(/^.+ /g, ""); right = right.replace(/ .+$/g, ""); return left + right; } alert(GetWordByPos(str, 6)); P.S. Not tested throughly and no error handling yet.
function getWordAt(s, pos) { // make pos point to a character of the word while (s[pos] == " ") pos--; // find the space before that word // (add 1 to be at the begining of that word) // (note that it works even if there is no space before that word) pos = s.lastIndexOf(" ", pos) + 1; // find the end of the word var end = s.indexOf(" ", pos); if (end == -1) end = s.length; // set to length if it was the last word // return the result return s.substring(pos, end); } getWordAt("this is a sentence", 4); function getWordAt(str, pos) { // Sanitise input str = str + ""; pos = parseInt(pos, 10); // Snap to a word on the left if (str[pos] == " ") { pos = pos - 1; } // Handle exceptional cases if (pos < 0 || pos >= str.length-1 || str[pos] == " ") { return ""; } // Build word var acc = ""; for ( ; pos > 0 && str[pos-1] != " "; pos--) {} for ( ; pos < str.length && str[pos] != " "; pos++) { acc += str[pos]; } return acc; } alert(getWordAt("this is a sentence", 6)); Something like this. Be sure to thoroughly test the loop logic; I didn't.