2012-03-31 4 views

Antwort

2

Kam mit kleinem Stück auf. Ich teile die Zeichenkette an der Cursorposition und hole die letzten Zeichen von der ersten Teilzeichenkette und die erste von der zweiten Zeichenkette.

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

Siehe Beispiel hier zu arbeiten: http://jsfiddle.net/paulbruno/8PR9H/

Hier ist, was passiert. getWord übernimmt die Eingabezeichenfolge str und die aktuelle Position des Cursors curPos. Es verwendet dann zwei rekursive anonyme Funktionen, um jeden Weg in der Zeichenfolge zu schieben, bis sie den Anfang und das Ende der Zeichenfolge treffen. Technisch gesehen heißen sie "Named Funciton Expressions" (see here) und ermöglichen es Ihnen, eine Funktion rekursiv aufzurufen, auch wenn Sie das Funktionsobjekt für die spätere Verwendung nicht speichern möchten. Nach dem Abrufen dieser beiden Indizes verwendet getWord die Methode substring erneut, um das Wort vom ursprünglichen str zurückzugeben.

0

Try this: 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

Die folgenden Arbeiten für den ersten Raumzeichen auf der linken und auf der rechten Seite der Startposition der Suche und gibt die Zeichenfolge dazwischen. Er ist der Auffassung jede aufeinander folgende Reihe von Zeichen durch Leerzeichen abgegrenzt und funktioniert sogar, wenn die Eingabe alphanumerische ist:

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);   
} 
+0

Dies ist eine schöne Methode. Das Worst-Case-Szenario wäre eine Zeichenfolge wie'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA [...] ', die wahrscheinlich die CPU töten würde. Eine gute Idee wäre, zu überprüfen, ob Platz vorhanden ist. –

Verwandte Themen