我正在尝试匹配jQuery Mobile URL的哈希片段,如下所示:
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中使用#?
答案 0 :(得分:5)
以通常的方式逃脱:
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正则表达式中的#
相同。
您还可以使用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
识别为哈希符号,因此\#
可能是更好的选择。
答案 1 :(得分:3)
在这里实施。使用简单的正则表达式(/\s+(?:#.*)?/g
)将heregex注释与空白一起删除,因此#
之前的任何非空白字符(或者在开头放置它)都可以。
$ coffee -bcs
/// [#] ///
/// (?:#) ///
///#///
// Generated by CoffeeScript 1.2.1-pre
/[#]/;
/(?:#)/;
/#/;