Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.05.2014, 11:20
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Escaper - микробиблиотека для "экранирования" литералов
Всем привет!

Хочу представить вам свою микролибу для экранирования литералов и комментариев в JavaScript. Либа поддерживает все виды строк (включая строки шаблоны), литералы регулярных выражений, а также комментарии.

Что собственно она делает: ищет в указанной строке конструкции вида

' ... '
" ... "
` ... `, ` ... ${...} `
/ ... /gim
/* ... */
// ...


И возвращает новую строку, где эти конструкции заменены на __ESCAPER_QUOT__номер_ и разумеется есть обратная операция.

Всего два метода:

Escaper.replace // замена
Escaper.paste // обратная замена


Эта либа полезная при написании микро-парсеров, где построение AST будет излишне. Она работает в один проход с помощью посимвольного анализа без использования регулярных выражений.

сама либа
__________________
kobezzza
code monkey
Ответить с цитированием
  #2 (permalink)  
Старый 30.05.2014, 13:52
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

kobezzza, а зачем это? (любопытно)
Что-то вроде String Templates in ES6?

Я почему спрашиваю: ты говорил, что пишешь на es6. В es6 это встроенный функционал.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #3 (permalink)  
Старый 30.05.2014, 14:07
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от nerv_ Посмотреть сообщение
kobezzza, а зачем это? (любопытно)
Что-то вроде String Templates in ES6?

Я почему спрашиваю: ты говорил, что пишешь на es6. В es6 это встроенный функционал.
Ты не понял что делает либа

Попробую объяснить на примере:

// Допустим есть функция
function foo() {
    var a = 'this'; /* this */
    var b = /this/;
}


Внутри Collection для оптимизации я изучаю тело функции на наличие this, т.е. делаю поиск по регулярке для foo.toString(), но перед тем как это делать нужно "заэкранировать" все литералы и комментарии, чтобы пример выше вернул, что this внутри функции не используется.

Задача на первый взгляд простая, но это обман Т.к. могут быть очень хитрые литералы, а строить AST для такой вещи - это гемор, да и работать это будет медленней.

Вот я делаю

Escaper.replace(foo.toString(), true)


И функция мне вернёт что-то вроде (строку):

"function foo() {\
    var a = __ESCAPER_QUOT__0_; __ESCAPER_QUOT__1_\
    var b = __ESCAPER_QUOT__2_;\
}"


Т.е. всё содержимое литералов было заменено на специальные константы и дальше я уже спокойно работаю со строкой. Ну и разумеется есть обратная replace операция - paste, которая принимает экранированную строку и возвращает её к прежнему виду (если это нужно).

Эту либу я юзаю вместе с Collection и Snakeskin, а также в других своих разработках.

Сообщение от nerv_ Посмотреть сообщение
Я почему спрашиваю: ты говорил, что пишешь на es6. В es6 это встроенный функционал.
Юзаю, поэтому сегодня как раз добавил поддержку строк-шаблонов

'`this ${this}`'


=>

'__ESCAPER_QUOT__0_this__ESCAPER_QUOT__1_;'
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 30.05.2014 в 14:29.
Ответить с цитированием
  #4 (permalink)  
Старый 30.05.2014, 16:12
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Ещё пример использования:
когда ещё не было более-менее нормальных трансляторов ES6, то я за вечерок с пивом на регулярках написал:
https://github.com/kobezzza/NeJS и он служил мне довольно долго в реальных проектах

Это костыль, но всё же
__________________
kobezzza
code monkey
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
drag-and-drop и position:fixed dotwatt Элементы интерфейса 5 05.12.2012 08:44
IDE для Java Script constant Библиотеки/Тулкиты/Фреймворки 0 27.09.2012 09:31
Модуль для web-to-print проекта Anton2507 Работа 0 29.07.2012 11:35
добавление стилей для множества элементов ??? Общие вопросы Javascript 7 14.06.2012 01:50