我有一个网址,如:
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
答案 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*
删除路径中的所有尾部斜杠。
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, "")));