Регулярное выражение для выделения слова в js

есть текст. нужно составить регулярное выражение для выделения слова.
сейчас используется следующее:
var result = /S+$/.exec(this.value.slice(0, this.value.indexOf(‘ ‘, caret.end))); где caret.end- позиция курсора.

как должно все работать:
есть предложение
"привет.я — мистер*шляпочник!и Я веселю(подкалываю) абсолютно всех!!!"
при установке курсора внутрь слова или на его границы, выражение должно возвращать слово.

например:
"мистер*шляпоч{кликаем сюда}ник!и"  возвращается "шляпочник"
должно корректно работать при клике на последнее слово предложения(когда знаки препинания отсутствуют.
вот ссылка на пример того, что есть.
http://jsfiddle.net/W4BaW/

Добавлено….
Герман Резниченко
у меня как раз будет ОООчень много текста + спецсимволы, которые в спан не обернешь.
тут только текстарея

Добавлено….
Qui-Gon
спасибо, но ваше решение не справится со словом Müss
так-же с другими языками( например итальянским и тд)

3 комментария: Регулярное выражение для выделения слова в js

  1. Gomoloff говорит:

    Весь сыр-бор из-за отвратительной реализации регулярок в JavaScript, который считает буквами только символы английского алфавита.
    Можно задать диапазон в unicode, тогда найдется и Müss, и смузи, и фраппе.
    var re = /(?!d+)[u00C0-u1FFFu2C00-uD7FFw]+/gi;

  2. FludGod говорит:

    <textarea onclick="caretPos(this)">привет.я — мистер*шляпочник!и Я веселю(подкалываю) абсолютно всех!!!</textarea>
    <script type="text/javascript">
    function caretPos(el)
    {
       var pos = 0;
       // IE Support
       if (document.selection)
       {
        el.focus ();
        var Sel = document.selection.createRange();
        var SelLength = document.selection.createRange().text.length;
        Sel.moveStart (‘character’, -el.value.length);
        pos = Sel.text.length — SelLength;
       }
       // Firefox support
       else if (el.selectionStart || el.selectionStart == ‘0’)
        pos = el.selectionStart;
       
    var str = el.value;
    var re = /[а-яa-z]+/gi;
    while ((match = re.exec(str)) != null) {
    if (pos >= match.index && (pos <= match.index + match[0].length))
    alert(match);
    }

    }
    </script>

  3. Ане4ка-крошка говорит:

    Там в принципе есть и код. Я как то делал подобное. И без регулярки. Просто оборачивал все слова в span с единым классом и динамическим id. Далее по клику узнаем id и вытаскиваем слово которое внутри span. Реализация не сложная, но если большой текст то не желательно. А вообще по моему есть плагины jQuery

Комментарии запрещены.