re.match(r'(?:TEL)?:? ?([0-9 ]{9-12})').group(1)
(?:...)
делает группу без захвата ([0-9 ]{9-12})
захватывает эту часть как группу (1)
Нет.
Я сохранил бы таблицу, поскольку это - единственная точка обслуживания.
Вы найдете, что выполнение XmlHTTPRequest для возврата пары ключ/значение на основе серверного запроса, на самом деле работало бы быстрее и имело бы значительно меньше объема потребляемой памяти, чем огромный массив JavaScript.
По моему опыту, перемещаясь вне нескольких тысяч строк в массив, кэшируемый клиентский в браузере, ведомом к адским событиям. Чрезмерно увеличенные в размерах объемы потребляемой памяти браузера, медленное время загрузки и общая медлительность были повесткой дня. Необходимо протестировать этот сценарий сами на опыт. Это стоит несколько минут, это взяло бы Вас.
Главным учесть является удобство для конечного пользователя. Предположение, что это работает хорошо над Вашей машиной, не будет означать, что работает хорошо над более старой машиной. Самая опасная часть о клиентском аспекте Вашего подхода - то, что он зависит в большой степени от того, что имеет клиент. Лично, я постарался бы не помещать так много данных в клиент, но я не знаю достаточно предпосылок к Вашему проекту определить, почему Вы, возможно, должны были бы сделать это.
Своего рода подход Ajax, получающий кэшированные данные с сервера, мог бы быть более соответствующим.