Рубрика «escape»

Забытые жемчужины отечественного игростроя. Часть 4 - 1

Количество годных и примечательных российских видеоигр, выпущенных в годы условного «расцвета» нашего игропрома, оказалось неожиданно велико. Составляя первую подборку, я, если честно, думал, что ей всё и ограничится. И для второй вроде и в самом деле пришлось «скрести по сусекам». Но потом я решил взяться за третью, и внезапно передо мной раскрылась, как в стихах классика, бездна звёзд полна. Не все эти звёзды были одинаково красивыми и яркими, но их определённо было куда больше, чем я рассчитывал изначально. Так что если не слишком частить, то до конца года жемчуга нам точно хватит.

На этой оптимистической ноте предлагаю приступить к сегодняшней подборке.
Читать полностью »

I. Возможности

Когда я прочитал на MDN про String.raw(): «The static String.raw() method is a tag function of template literals, similar to the r prefix in Python or the @ prefix in C# for string literals» — я здорово обрадовался, потому что мне часто не хватало в JavaScript чего-то вроде одиночных кавычек в Perl.

Я сразу придумал несколько видов использования и стал активно применять их в скриптах.

1. Определение путей к файлам Windows без двойного экранирования.

const r = String.raw;

const test_module = require(r`e:DOCprgjsnode-libtest.js`);

2. Определение путей к ключам реестра Windows.

const r = String.raw;

const Winreg = require('winreg');

const regKey = new Winreg({
  hive: Winreg.HKCU,
  key: r`SoftwareMPC-HCMPC-HCSettings`
});

3. Создание сложных регулярных выражений из составных литералов.

См. пример кода в одной из недавних статей.

II. Ограничения

Однако со временем я стал натыкаться на неожиданные ограничения. Написав об одном из них в багтрекер V8, я получил отрезвляющее объяснение. Оказывается, хоть String.raw и выдаёт строку без интерпретации экранированных литералов, на стадии парсинга кода анализатор всё равно требует, чтобы литералы соответствовали правилам. Из этого следуют неочевидные ограничения для упомянутых случаев применения. Читать полностью »

1. C чего всё началось

Недавно у меня возникла необходимость написать очередную утилиту, обрабатывающую текстовый файл в формате, похожем на упрощённый BBCode, а именно в формате исходников для словарей ABBYY Lingvo — DSL (Dictionary Specification Language). (Не путать с другим DSL (Domain-specific language) — интересный случай, когда гипоним является омонимом к гиперониму).

Достаточно сказать, что в языке используются теги в квадратных скобках и что квадратные скобки можно экранировать обратной косой чертой, если нужно использовать их как часть обычного текста.

Одной из задач утилиты было как раз нахождение этих тегов с исключением экранированных сочетаний.

Поскольку в регулярных выражениях JavaScript с недавнего времени можно пользоваться lookbehind assertions (в личных целях), я подумал, нельзя ли реализовать поиск при помощи этого средства, — тем более что в данной разновидности lookbehind можно использовать выражения переменной длины. Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js