我试图匹配这样的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中可以使用#吗?

最佳答案

以通常的方式进行转义:

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是哈希符号,因此\#可能是一个更好的选择。

10-06 00:02