我有一个文本区域与此内容:

<textarea id="text">
Hello! Who am I? This is the third sentence. This, is another sentence.
</textarea>


由于这是一个文本区域,因此可以集中显示。我正在尝试找到一种方法:


将文本区域内的所有句子分成一个javascript数组。我尝试了$('#text')。val()。split()方法,但是在我的示例中不止一个句子分隔符。
我还需要知道光标当前所在的句子。


为什么,你可能会问?用户更改内容时,我需要处理(使用按字符收费的付费API)语句。如果我仅对第二句话做些小改动,为什么要提交第一,第三和第四句话?当然,只提交第二个就便宜得多。

就像我之前说的,如果人们只使用点分隔句子,.split()方法将是完美的,但是还有其他字符也应考虑为(!?。)-关于第二点,我发现了一个函数找到de插入位置:

function doGetCaretPosition (ctrl) {
    var CaretPos = 0;
    if (document.selection) {
        ctrl.focus ();
        var Sel = document.selection.createRange ();
        Sel.moveStart ('character', -ctrl.value.length);
        CaretPos = Sel.text.length;
    } else if (ctrl.selectionStart || ctrl.selectionStart == '0') {
        CaretPos = ctrl.selectionStart;
    }
    return (CaretPos);
}


问题是,该职位如何帮助我找到句子编号?欢迎所有想法!

最佳答案

我可以看到的最简单的方法是像您提到的那样对str进行split()。根据我的理解(并且没有找到对此的任何引用),jQuery实际上并没有split()函数,但是:

var str = $('#text').val();
var sentences = str.split(/[.|!|?]\s/gi);


如您所见,javascript的split函数允许使用正则表达式。但是正则表达式并不完美(已经晚了,明天我会研究更好的正则表达式)。

有了句子后,只需计算每个字符串的长度,直到获得插入符号的位置即可。因此得到第一句的长度,=到插入号的位置较大,如果不是,则得到第二个字符串+第一个字符串的长度,等于或更大。如果等于或大于,则表示您正在使用的句子,使用的索引是句子编号。

关于javascript - 将textarea句子拆分为数组,并找出keyup()上哪个句子发生了变化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11111801/

10-14 02:08