从网址的开头和结尾删除斜杠

时间:2019-01-26 07:06:40

标签: javascript jquery regex url slash

我有一个网址,如:

var folderPath = 'files/New folder';

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

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

OR

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

OR

./files/New folder/

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

我尝试过什么?

尝试了以下操作,但仅从URL开头删除了多个斜杠“ ../”和“ ./”。

var cleaned  = folderPath.replace(/^.+\.\//, '');

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

files/New folder

4 个答案:

答案 0 :(得分:1)

因此,这里的想法是首先使用正则表达式,我从输入字符串中删除匹配项,但是它还包含//,您也想删除这些多余的内容,因此在回调函数中,我删除了这些//也可以在匹配的组上使用替换。

我想(尝试使用两次替换)仍然可以改善,我想进一步改善。

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

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

答案 1 :(得分:1)

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

\/?\.\.?\/|\/{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,''));

答案 2 :(得分:1)

过滤器怎么样?

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/"))

答案 3 :(得分:0)

要删除所有以/.开头并以/结尾的/

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

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