Как использовать # как часть CoffeeScript Heregex? - PullRequest
4 голосов
/ 29 февраля 2012

Я пытаюсь сопоставить хеш-фрагмент URL-адреса jQuery Mobile следующим образом:

    matches = window.location.hash.match ///
        #                   # we're interested in the hash fragment
        (?:.*/)?            # the path; the full page path might be /dir/dir/map.html, /map.html or map.html
                            # note the path is not captured
        (\w+\.html)$        # the name at the end of the string
        ///

Однако проблема в том, что символ # отбрасывается из регулярного выражения в скомпилированном файле JS, потому что он рассматривается как начало комментария. Я знаю, что могу переключиться на обычное регулярное выражение, но есть ли способ использовать # в heregex?

Ответы [ 2 ]

5 голосов
/ 29 февраля 2012

Побег как обычно:

matches = window.location.hash.match ///
    \#                  # we're interested in the hash fragment
    (?:.*/)?            # the path; the full page path might be /dir/dir/map.html, /map.html or map.html
                        # note the path is not captured
    (\w+\.html)$        # the name at the end of the string
    ///

Это скомпилируется с этим регулярным выражением:

/\#(?:.*\/)?(\w+\.html)$/

И \# совпадает с # в регулярном выражении JavaScript.

Вы также можете использовать escape Unicode \u0023:

matches = window.location.hash.match ///
    \u0023              # we're interested in the hash fragment
    (?:.*/)?            # the path; the full page path might be /dir/dir/map.html, /map.html or map.html
                        # note the path is not captured
    (\w+\.html)$        # the name at the end of the string
    ///

Но не многие люди признают \u0023 хеш-символом, поэтому \#, вероятно, лучший выбор.

3 голосов
/ 29 февраля 2012

Реализатор здесь.Комментарии Heregex удаляются вместе с пробелами, используя простое регулярное выражение (/\s+(?:#.*)?/g), поэтому любой непробельный символ до # (или помещающий его в самом начале) работает.

$ coffee -bcs
  /// [#] ///                      
  /// (?:#) ///
  ///#///       

// Generated by CoffeeScript 1.2.1-pre
/[#]/;

/(?:#)/;

/#/;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...