Javascript 为什么不是';这个正则表达式不符合预期的方式吗?

Javascript 为什么不是';这个正则表达式不符合预期的方式吗?,javascript,regex,Javascript,Regex,我试图去掉斜杠字符,以防它出现在字符串的末尾。我使用了下面的表达式,意在匹配行尾没有斜杠的任何字符 出于某种原因(当然是逻辑上的和可以解释的,但不是我自己掌握的),我将其分成三个字符串,如下所示 [“http:”、“hazaa.com”、“blopp”] 我错在哪里 如何解决 当前正则表达式将与字符串部分匹配,直到遇到第一个/或$。忽略第二个参数;对于,没有第二个参数 要删除尾部斜杠,请使用以下函数: var str = "http://hazaa.com/blopp/"; str = str.

我试图去掉斜杠字符,以防它出现在字符串的末尾。我使用了下面的表达式,意在匹配行尾没有斜杠的任何字符

出于某种原因(当然是逻辑上的和可以解释的,但不是我自己掌握的),我将其分成三个字符串,如下所示

[“http:”、“hazaa.com”、“blopp”]

  • 我错在哪里
  • 如何解决
  • 当前正则表达式将与字符串部分匹配,直到遇到第一个
    /
    $
    。忽略第二个参数;对于,没有第二个参数

    要删除尾部斜杠,请使用以下函数:

    var str = "http://hazaa.com/blopp/";
    str = str.replace(/\/$/, "");
    console.log(str);
    // "http://hazaa.com/blopp"
    
    var str = "http://hazaa.com/blopp/";
    //replace the last slash with an empty string to remove it
    str = str.replace(/\/$/,'');
    
    如果需要检查字符串是否以斜杠结尾,请使用
    string.match
    方法,如下所示:

    var str = "http://hazaa.com/blopp/";
    var match = str.match(/\/$/);
    console.log(match);
    // null if string does not end with /
    // ["/"] if string ends with a /
    
    如果您需要抓取除最后一个字符为
    /
    之外的所有内容,请使用以下方法:

    var r = /(.+?)\/*$/;
    console.log("http://hazaa.com/blopp//".match(r)); // ["http://hazaa.com/blopp//", "http://hazaa.com/blopp"]
    console.log("http://hazaa.com/blopp/".match(r)); // ["http://hazaa.com/blopp/", "http://hazaa.com/blopp"]
    console.log("http://hazaa.com/bloppA".match(r)); // ["http://hazaa.com/bloppA", "http://hazaa.com/bloppA"]
    
    返回数组中的第二个索引包含URL的所需部分。正则表达式的工作原理如下:

    • (.+?)
      不贪婪地匹配(并捕获)任何字符
    • \/*$
      匹配可选的尾随斜杠
    正则表达式的第一部分故意更改为非贪婪。如果它是贪婪的,那么只要整个正则表达式匹配,它就会尝试找到最大的匹配项(在这个过程中使用尾随的
    /
    )。取消冻结时,只要整个正则表达式匹配,它就会找到最小的匹配项。

    当前正则表达式将匹配字符串部分,直到遇到第一个
    /
    $
    。忽略第二个参数;对于,没有第二个参数

    要删除尾部斜杠,请使用以下函数:

    var str = "http://hazaa.com/blopp/";
    str = str.replace(/\/$/, "");
    console.log(str);
    // "http://hazaa.com/blopp"
    
    var str = "http://hazaa.com/blopp/";
    //replace the last slash with an empty string to remove it
    str = str.replace(/\/$/,'');
    
    如果需要检查字符串是否以斜杠结尾,请使用
    string.match
    方法,如下所示:

    var str = "http://hazaa.com/blopp/";
    var match = str.match(/\/$/);
    console.log(match);
    // null if string does not end with /
    // ["/"] if string ends with a /
    
    如果您需要抓取除最后一个字符为
    /
    之外的所有内容,请使用以下方法:

    var r = /(.+?)\/*$/;
    console.log("http://hazaa.com/blopp//".match(r)); // ["http://hazaa.com/blopp//", "http://hazaa.com/blopp"]
    console.log("http://hazaa.com/blopp/".match(r)); // ["http://hazaa.com/blopp/", "http://hazaa.com/blopp"]
    console.log("http://hazaa.com/bloppA".match(r)); // ["http://hazaa.com/bloppA", "http://hazaa.com/bloppA"]
    
    返回数组中的第二个索引包含URL的所需部分。正则表达式的工作原理如下:

    • (.+?)
      不贪婪地匹配(并捕获)任何字符
    • \/*$
      匹配可选的尾随斜杠
    正则表达式的第一部分故意更改为非贪婪。如果它是贪婪的,那么只要整个正则表达式匹配,它就会尝试找到最大的匹配项(在这个过程中使用尾随的
    /
    )。取消reedy时,只要整个正则表达式匹配,它就会找到最小的匹配项。

    str.match(“[^/$]+”,“g”),为什么要将美元符号放在括号内?它应该在外部,即,
    str.match(“[^/]+$”,“g”)

    要删除所有尾随斜杠,可以使用
    str.replace(/\/+$/,“”)
    。(如果只想删除最后一个尾随斜杠,请删除
    替换
    的正则表达式中的
    +

    更新:

    还有一种方法不使用
    替换

    function stripEndingSlashes(str) {
        var matched = str.match("(.*[^/]+)/*$");
        return matched ? matched[1] : "";
    }
    
    str.match(“[^/$]+”,“g”),为什么要将美元符号放在括号内?它应该在外部,即,
    str.match(“[^/]+$”,“g”)

    要删除所有尾随斜杠,可以使用
    str.replace(/\/+$/,“”)
    。(如果只想删除最后一个尾随斜杠,请删除
    替换
    的正则表达式中的
    +

    更新:

    还有一种方法不使用
    替换

    function stripEndingSlashes(str) {
        var matched = str.match("(.*[^/]+)/*$");
        return matched ? matched[1] : "";
    }
    

    为什么要使用正则表达式?只需检查字符串的最后一个符号是否是斜杠,然后切片即可。像这样:

    if (str.slice(-1) === '/') {
      str = str.slice(0, -1);
    }
    

    为什么要使用正则表达式?只需检查字符串的最后一个符号是否是斜杠,然后切片即可。像这样:

    if (str.slice(-1) === '/') {
      str = str.slice(0, -1);
    }
    
    regexp正在选择“除斜杠以外的所有内容”。这就是为什么
    match()
    返回斜杠之间的字符串部分

    您可以使用
    replace()
    函数解决此问题:

    var str = "http://hazaa.com/blopp/";
    str = str.replace(/\/$/, "");
    console.log(str);
    // "http://hazaa.com/blopp"
    
    var str = "http://hazaa.com/blopp/";
    //replace the last slash with an empty string to remove it
    str = str.replace(/\/$/,'');
    
    regexp文本应始终包含在
    /
    字符之间。这里的regexp是:

    • \/
      :表示单个斜杠字符。为了防止Javascript将斜杠解释为regexp的结尾,需要使用反斜杠对其进行“转义”

    • $
      :这表示字符串的结尾

      • regexp正在选择“除斜杠以外的所有内容”。这就是为什么
        match()
        返回斜杠之间的字符串部分

        您可以使用
        replace()
        函数解决此问题:

        var str = "http://hazaa.com/blopp/";
        str = str.replace(/\/$/, "");
        console.log(str);
        // "http://hazaa.com/blopp"
        
        var str = "http://hazaa.com/blopp/";
        //replace the last slash with an empty string to remove it
        str = str.replace(/\/$/,'');
        
        regexp文本应始终包含在
        /
        字符之间。这里的regexp是:

        • \/
          :表示单个斜杠字符。为了防止Javascript将斜杠解释为regexp的结尾,需要使用反斜杠对其进行“转义”

        • $
          :这表示字符串的结尾


        好的,这实际上回答了(1)和(2),但引出了另一个问题。如果要匹配(不再替换)除尾随斜杠以外的所有字符,应该如何放置正则表达式?我试图
        str.match(“^(/$)”,“g”)
        ,但失败了。@agstudy和Salman:Running
        ”http://hazaa.com/blopp/“.match(/\/$/,”)
        我得到斜杠。我想得到除斜杠以外的所有答案。好吧,这实际上回答了(1)和(2),但引出了另一个问题。如果要匹配(不再替换)除尾随斜杠以外的所有字符,应该如何放置正则表达式?我试图
        str.match(“^(/$)”,“g”)
        ,但失败了。@agstudy和Salman:Running
        ”http://hazaa.com/blopp/“.match(/\/$/,”)
        我得到斜杠。为了学习,我想得到除斜杠以外的所有东西。我想知道如何处理更复杂的问题。
        str.slice(-1)=“/”
        更短。如果str后面有多个斜杠呢?是的,没有正则表达式,你仍然可以解决这个问题,但正则表达式要简洁得多。@Hui Zheng:我怀疑url中会有多个斜杠,但你是对的…
        str.slice(0,-1)
        也更短。你