2012-03-31 64 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

相關問題