如何使用JavaScript在输入字段中的光标下获取字符串

时间:2012-03-31 20:58:36

标签: javascript regex

我可以在输入字段中获取光标的实际位置。我怎样才能全面了解这个立场。例如,我的输入文本如下:Hello World,光标位于第2位。我怎样才能获得Hello

4 个答案:

答案 0 :(得分:2)

拿出一小块。我将字符串拆分到光标位置,从第一个子字符串和第二个子字符串中获取最后一个字符。

    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 :(得分: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传回该字。

答案 2 :(得分:1)

以下工作方法是在起始位置的左侧和右侧查找第一个空格字符,并在其间返回字符串。它会考虑由空格描绘的任何连续字符串,即使输入是字母数字也会起作用:

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

答案 3 :(得分:0)

试试这个: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);
};