【问题标题】:Exact string match with javascript regex与 javascript 正则表达式的精确字符串匹配
【发布时间】:2012-04-05 21:41:07
【问题描述】:

我正在努力解决可能是一个非常简单的正则表达式问题。我正在开发一个简单的原型,并且需要知道我在哪个页面上,因此如果用户单击菜单小部件以导航到同一视图,我不会重新加载它。

我有两个网址可供用户切换:

http://localhost/TestMVC/Larry/LarryTiles

http://localhost/TestMVC/Larry/LarryTilesList

URL 还可以有一些尾随查询字符串项,如下所示: http://localhost/TestMVC/Larry/LarryTilesList?filterValue=servers

LarryTiles 给了我这个问题。 "/\bLarryTiles\b/" 周五工作(在这里其他问题的答案之后),但现在不匹配。 :)

我需要在这两个 URL 中准确找到字符串“LarryTiles”和“LarryTilesList”,但不知道该怎么做。我的本地计算机和托管它的各种服务器之间的 URL 会发生变化,因此我不能依赖位置。

编辑:添加了带有尾随查询字符串的示例,我忘记了。对不起:(

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    您可以像这样获取 URL 的最后一个路径段:

    function getLastPathSegment(url) {
        var match = url.match(/\/([^\/]+)\/?$/);
        if (match) {
            return(match[1]);
        }
        return("");
    }
    
    // returns "LarryTiles"
    getLastPathSegment("http://localhost/TestMVC/Larry/LarryTiles");     
    
    // returns "LarryTilesList"
    getLastPathSegment("http://localhost/TestMVC/Larry/LarryTilesList");
    

    所以,你可以这样做:

    var endPath = getLastPathSegment(window.location.pathname);
    if (endPath == "LarryTiles") {
        // some code
    } else if (endPath == "LarryTilesList") {
        // some code
    } else {
        // some code
    }
    

    【讨论】:

    • 根据来自 OP 的新信息,我更新了我的示例以使用 window.location.pathname,因此任何查询字符串或哈希标记在比较之前都已被剥离。
    • 我正在测试这个,但是 VS 和 Chrome 都说你的正则表达式有错误。
    • @dex3703 - 是的,抱歉有一个错字,我已经修正了。
    【解决方案2】:

    您可以使用此代码:

    str = 'http://localhost/TestMVC/Larry/LarryTiles?filterValue=servers';
    
    if (str.match(/\/([^\/?]+)(?=\/$|\?|$)/)) {
       if (match[1] == 'LarryTiles')
           alert('LarryTiles found');
       else if (match[1] == 'LarryTilesList')
           alert('LarryTilesList found');
    }
    

    【讨论】:

    • 这很容易受到尾部斜杠的影响。
    • 同意,但 OP 问题中的 URL 没有斜杠。
    • 根据您最新编辑的问题,我更新了我的答案以处理trailing slash、query string 等案例。
    • 谢谢。我注意到这会找到“LarryTiles”和“/LarryTiles”,但我只是像上面那样使用 match[1]。效果很好。这是一个可怕的正则表达式!
    【解决方案3】:

    似乎你解释的工作,否则试试这个:http://jsfiddle.net/Wfz9d/

    您有区分大小写的问题吗?

    【讨论】:

    • 大小写不是问题,尽管这些是正在使用的 URL。
    猜你喜欢
    • 2012-08-18
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多