从 URL 的开头和结尾删除斜杠

Remove slashes from Start and end of the URL

我有一个 URL 喜欢 :

var folderPath = 'files/New folder';

以下是我要防止的情况,例如用户尝试:

../../.././../../././../files/New folder

../../.././../../././../files/New folder/../../././../.././

./files/New folder/

基本上我需要从 URL 中提取新文件夹,因此我需要清理 URL!

我尝试了什么?

尝试了以下方法,但它只删除了 URL.

开头的多个斜杠“../”和“./”
var cleaned  = folderPath.replace(/^.+\.\//, '');

预期输出: 如果有人可以提供清理 url 的功能,那将会很有帮助。

files/New folder

所以这里的想法是首先使用正则表达式我从输入字符串中取出匹配但它包含 // 额外的你也想删除所以在回调函数中我删除那些 // 也在匹配组上使用替换。

我想这个(使用替换两次)仍然可以改进我正在尝试改进更多。

function replaceDots(input){
  return input.replace(/^[./]+([^.]+)\/?.*/g, function(match,group){
    return group.replace(/(.*?)\/*$/, "")
  })
}

console.log(replaceDots(`../../.././../../././../files/New folder`))
console.log(replaceDots(`files/New folder`))
console.log(replaceDots(`../../.././../../././../files/New folder/../../././../.././`))
console.log(replaceDots(`///../..///files/New folder///../`))

您可以使用此正则表达式删除路径中所有不需要的文本,

\/?\.\.?\/|\/{2,}|\/\s*$

\/?\.\.?\/ 这会删除类型为 .././/../ 的所有模式,并且 \/{2,} 会删除所有出现的两个或多个 /\/\s* 删除路径中的所有尾部斜杠。

Demo

console.log('../../.././../../././../files/New folder'.replace(/\/?\.\.?\/|\/{2,}|\/\s*$/g,''));
console.log('../../.././../../././../files/New folder/../../././../.././'.replace(/\/?\.\.?\/|\/{2,}|\/\s*$/g,''));
console.log('./files/New folder/'.replace(/\/?\.\.?\/|\/{2,}|\/\s*$/g,''));
console.log('///../..///files/New folder///../'.replace(/\/?\.\.?\/|\/{2,}|\/\s*$/g,''));

过滤器怎么样?

var oneSlash = (str) => str.split("/").filter(
      word => word.match(/\w+/)
    ).join("/")

console.log(oneSlash(" ../../.././../../././../files/New folder"))

console.log(oneSlash("///../..///files/New folder///../"))

// this imaginary useless path ends up like the others

console.log(oneSlash("files/////New folder/"))

删除所有以 ./ 加上结尾 /:

/

var folderPaths = [
  "../../.././../../././../files/New folder",
  "../../.././../../././../files/New folder/../../././../.././",
  "./files/New folder/"
];
var re = new RegExp('(?:[./]+)/|/$', 'g');

folderPaths.forEach(e => console.log(e.replace(re, "")));