I'm trying to match the hash fragment of a jQuery Mobile URL like this:
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
///
However, the problem is that the # symbol gets chopped from the regex in the compiled JS file because it's treated as the start of a comment. I know I could switch to a normal regex, but is there any way to use # in a heregex?
Escape it in the usual fashion:
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
///
That will compile to this regex:
/\#(?:.*\/)?(\w+\.html)$/
And \#
is the same as #
in a JavaScript regex.
You could also use the Unicode escape \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
///
But not many people are going to recognize \u0023
as a hash symbol so \#
is probably a better choice.
Implementer here. Heregex comments are removed altogether with whitespace using a simple regex (/\s+(?:#.*)?/g
), so any non-whitespace character before #
(or placing it at the very beginning) works.
$ coffee -bcs
/// [#] ///
/// (?:#) ///
///#///
// Generated by CoffeeScript 1.2.1-pre
/[#]/;
/(?:#)/;
/#/;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With