Моя репутация недостаточно высока для комментария или добавления дополнительных ссылок, поэтому мне жаль писать новый ответ без всех ссылок.
Меня заинтересовала производительностьупомянутые выше решения и добавили некоторый код для измерения.Чтобы было проще, я добавил только эти строки:
var start = new Date();
// hightlighting code goes here ...
var end = new Date();
var ms = end.getTime() - start.getTime();
jQuery("#time-ms").text(ms);
Я разветвил решение Anurag с этими линиями, и это привело в среднем к 40-60 мс.
Так что я раздвоил эту скрипкуи сделал некоторые улучшения, чтобы соответствовать моим потребностям.Одной из них было экранирование RegEx (см. Ответ CoolAJ86 в «escape-string-for-use-in-javascript-regex» в stackoverflow).Другим пунктом было предотвращение второго «нового RegExp ()», так как функция RegExp.test должна игнорировать глобальный флаг и возвращаться при первом совпадении (см. Ссылку на javascript на RegExp.test).
На моей машине (Chromium, Linux) я имею время работы около 30-50 мс.Вы можете проверить это самостоятельно в этом jsfiddle .
Я также добавил свои таймеры к решению галамбалаз с наивысшим рейтингом, это можно найти в этом jsFiddle .Но у этого есть время выполнения 60-100 мс.
Значения в миллисекундах становятся еще выше и имеют гораздо большее значение при работе (например, в Firefox около четверти секунды).