代码之家  ›  专栏  ›  技术社区  ›  Jens Törnell

javascript修剪双斜杠

  •  2
  • Jens Törnell  · 技术社区  · 7 年前

    我想修一下 //a/url/// a/url . StackOverflow有一些问题,但它们不起作用,解决了另一个问题,或者太长太复杂。

    下面的代码正在工作,它基于 Javascript regular expression: remove first and last slash

    function trimSlashes(str) {
      str = str.replace(/^\/|\/$/g, '');
      return str.replace(/^\/|\/$/g, '');
    };
    

    不过,像这样复制代码并不太好。一个正则表达式看起来如何处理双斜杠?

    测试向量

    let str1 = trimSlashes('/some/url/here/');
    let str2 = trimSlashes('//some/other/url/here///');
    

    预期结果

    some/url/here
    some/other/url/here
    

    愿望清单

    • 只有一个正则表达式
    • 越短或更快越好
    3 回复  |  直到 7 年前
        1
  •  1
  •   cody    7 年前

    replace(/^\/+|\/+$/g, '') 您正在寻找的是:

    两个测试用例的结果:

    > '/some/url/here/'.replace(/^\/+|\/+$/g, '');
    "some/url/here"
    
    > '//some/other/url/here///'.replace(/^\/+|\/+$/g, '');
    "some/other/url/here"
    

    解释:

    ^\/+  # one or more forward slashes at the beginning
    |     # or
    \/+$  # one or more forward slashes at the end
    
        2
  •  2
  •   Jens Törnell    7 年前

    这是另一个没有regex但是有功能的变体。我不知道这场演出,但我写得很有趣,似乎不那么神秘。

    const newString = '//some/other/url/here///'
    .split('/')
    .filter(s => s)
    .join('/')
    

    编辑:

    刚刚运行了一些性能测试,这比regex慢,但如果谨慎使用,可能无关紧要。

    https://jsperf.com/regex-vs-functional/1

        3
  •  1
  •   Damo    7 年前

    对于正则表达式,您必须小心意外的匹配。例如,当文本为“/”,而这是某行文本中的注释时,是否要修剪斜线?

    如果你不想修剪这些东西,你需要对regex更小心一点,这个怎么样?

    let regex = /^\/+([\w\/]+?)\/+$/;
    let matches = regex.exec("//some/other/url/here///");
    let url = matches[1];
    

    https://regex101.com/r/K8CnxP/1