0

テキストボックスでは、ユーザーがタブアウトの [] で囲まれた次の単語にジャンプできるという要件があります。たとえば、こんにちは [これ] は [an] の例です。[this] のテスト したがって、カーソルが Hi にあるときに tab out を実行すると、[this] で囲まれた文字が強調表示され、再び tabl out を実行すると、次の [an] で囲まれた次の文字が強調表示されます。これはうまくいきます

[] の間の特殊文字を含むテキストを強調表示する必要がある

ケース1: 末尾 が]]]ある場合、先頭のみを強調表示し[[[、無視します。]]]]タブでトレーニングを無視するスクリーンショット ]]]]

ケース 2:複数の末尾の]eeの場合、[これ]]]][test]であり、理想的には this から[]1 つのタブを 1 つ取り出し、次の[テキストに移動する必要があります] ここに画像の説明を入力

強いテキスト コードは

$(document).ready(function() {
    $('textarea').highlightTextarea({
        color : '#0475D1',
        words : [ "/(\[.*?\])/g" ],
        textColor : '#000000'
    });
    $('textarea').live('keydown', function(e) {
        var keyCode = e.keyCode || e.which;
        if (keyCode == 9) {
            var currentIndex = getCaret($(this).get(0))
            selectText($(this), currentIndex);
            return false;
        }
    });
});

function selectText(element, currentIndex) {
    var rSearchTerm = new RegExp(/(\[.*?\])/);
    var ind = element.val().substr(currentIndex).search(rSearchTerm)
    currentIndex = (ind == -1 ? 0 : currentIndex);
    ind = (ind == -1 ? element.val().search(rSearchTerm) : ind);
    currentIndex = (ind == -1 ? 0 : currentIndex);
    var lasInd = (element.val().substr(currentIndex).search(rSearchTerm) == -1 ? 0
            : element.val().substr(currentIndex).indexOf(']'));
    var input = element.get(0);
    if (input.setSelectionRange) {
        input.focus();
        input.setSelectionRange(ind + currentIndex, lasInd + 1 + currentIndex);
    } else if (input.createTextRange) {
        var range = input.createTextRange();
        range.collapse(true);
        range.moveEnd('character', lasInd + 1 + currentIndex);
        range.moveStart('character', ind + currentIndex);
        range.select();
    }
}

function getCaret(el) {
    if (el.selectionEnd) {
        return el.selectionEnd;
    } else if (document.selection) {
        el.focus();
        var r = document.selection.createRange();
        if (r == null) {
            return 0;
        }
        var re = el.createTextRange(), rc = re.duplicate();
        re.moveToBookmark(r.getBookmark());
        rc.setEndPoint('EndToStart', re);
        return rc.text.length;
    }
    return 0;
}

上記の2つのケースを処理することを教えてください

4

3 に答える 3

1

最後に複数の角括弧に一致するように正規表現を調整する必要があります。現時点では、"/(\[.*?\])/g"1 つの角かっこのみに一致します。

これを試してみてください"/(\[.*?\]*)/g"

于 2013-07-03T11:02:22.483 に答える
1

この正規表現でそれを行うことができます

(\[[^\[\]]*)+([^\[\]]*\])+

デモ

于 2013-07-03T11:27:33.093 に答える