finding the word at a position in javascript

匿名 (未验证) 提交于 2019-12-03 02:27:02

问题:

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?

回答1:

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:

  • For the beginning of the word, matched by /\S+$/
  • Just past the end of the word, using /\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. 


回答2:

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.



回答3:

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); 


回答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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!