Существует ли более короткий способ записать это?
var needed = /\$\[\w+\]/mi;
needed.compile(/\$\[\w+\]/mi);
Почему я должен пасовать назад шаблон в regex, когда я уже объявил это в первой строке?!
Существует два способа определения регулярных выражений в JavaScript - один через конструктор объекта, а другой через литерал. Объект можно изменить во время выполнения, но литерал компилируется при загрузке сценария и обеспечивает лучшую производительность.
var txt=new RegExp(pattern,modifiers);
или более просто:
var txt=/pattern/modifiers;
Это то же самое, о чем говорит Коббай. Короче говоря, вам не нужно делать и то, и другое.
из MDC :
Литеральная нотация обеспечивает компиляцию регулярного выражения при вычислении выражения
, поэтому / \ $ \ [\ w + \] / mi
уже является скомпилированным регулярным выражением.