2012-03-31 68 views

回答

2

拿出一小块。我在光标位置分割字符串,并从第一个子字符串和第二个字符串的第一个中获取最后一个字符。通过寻找在左边,在起始位置的右侧的第一个空格字符http://jsfiddle.net/fYkEB/

var el=document.getElementById('el'); 
var run=document.getElementById('run'); 

function findWord(str,pos){ 
    var words=str.split(' '); 
    var offset=0; 
    var i; 
    for(i=0;i<words.length;i++){ 
     offset+=words[i].length+1; 
     if (offset>pos) break; 

    } 
    return words[i]; 
} 

run.onclick=function(){ 
    run.value='Word at cursor: '+findWord(el.value,el.selectionStart); 
}; 
1
function getWord (str, curPos) { 
    var startIndex = (function _this (pos) { 
     if (!str.substring(pos, pos + 1).match(/[A-Za-z]/)) { 
      return pos + 1; 
     } else if (pos === 0) { 
      return 0; 
     } else { 
      return _this(pos - 1); 
     } 
    })(curPos - 1); 
    var endIndex = (function _this (pos) { 
     if (!str.substring(pos, pos + 1).match(/[A-Za-z]/) || pos === str.length) { 
      return pos; 
     } else { 
      return _this(pos + 1); 
     } 
    })(curPos + 1); 

    return str.substring(startIndex, endIndex); 
} 

看到这里的工作例如:http://jsfiddle.net/paulbruno/8PR9H/

这里发生了什么。 getWord取输入字符串str和光标当前位置curPos。然后它使用两个递归匿名函数来推送字符串中的每个方法,直到它们碰到字符串的开始和结尾。从技术上讲,它们被称为“命名函数表达式”(see here),并允许您递归地调用函数,即使您不想保存函数对象以备后用。然后,在获得这两个索引后,getWord再次使用substring方法,将原始str中的单词传回。

0

试试这个。它认为用空格划定字符的任意字符串,连续,并将努力,即使输入字母数字:

http://jsfiddle.net/PNA5T/

function myGetWord(aString,aPos){ 
    Nstr = aString.length; 
     var start = aPos; 
     var end = aPos; 
     while (start>0 && aString[start]!=" ") 
      start--; 
     while (end<Nstr && aString[end]!=" ") 
      end++; 
    return aString.substring(start,end);   
} 
1

下工作和之间返回字符串:

var value = $(el).val() 
    var split = el.selectionStart 
    var a = value.substring(0, split).match(/[A-Za-z]*$/)[0] 
    var b = value.substring(split).match(/^[A-Za-z]*/)[0] 
    console.log(a + b) 
+0

这是一个很好的方法。最糟糕的情况是像'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA [']''这可能会杀死CPU的字符串。一个好主意是检查是否有空间。 – 2014-09-12 10:09:33