如何查找给定路径是绝对/相对路径还是将其转换为绝对路径以进行文件操作?

时间:2010-03-09 04:46:44

标签: regex javascript

我正在javascript / jscript中编写一个小的windows脚本,用于查找regexp的匹配项,其中包含通过操作文件获得的字符串。

文件路径可以相对或绝对提供。如何查找给定路径是绝对/相对路径还是将其转换为绝对路径以进行文件操作?

2 个答案:

答案 0 :(得分:5)

  

如何查找给定路径是绝对的还是相对的......

来自MSDN文章Naming Files, Paths, and Namespaces

  

如果文件名不是以下列之一开头,则该文件名与当前目录相关:

     
      
  • 任何格式的UNC名称,始终以两个反斜杠字符(“\\”)开头。有关详细信息,请参阅下一节。
  •   
  • 带有反斜杠的磁盘指示符,例如“C:\”或“d:\”。
  •   
  • 单个反斜杠,例如“\ directory”或“\ file.txt”。这也称为绝对路径
  •   

因此,严格地说,绝对路径是以单个反斜杠(\)开头的路径。您可以按如下方式检查此条件:

if (/^\\(?!\\)/.test(path)) {
  // path is absolute
}
else {
  // path isn't absolute
}

但通常通过绝对路径,我们实际上是指完全限定路径。在这种情况下,您需要检查所有三个条件,以区分完整路径和相对路径。例如,您的代码可能如下所示:

function pathIsAbsolute(path)
{
  if ( /^[A-Za-z]:\\/.test(path) ) return true;
  if ( path.indexOf("\\") == 0 )   return true;
  return false;
}

或(使用单个正则表达式且可读性稍差):

function pathIsAbsolute(path)
{
  return /^(?:[A-Za-z]:)?\\/.test(path);
}

  

...并将其转换为绝对文件操作?

使用FileSystemObject.GetAbsolutePathName方法:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var full_path = fso.GetAbsolutePathName(path);

答案 1 :(得分:1)

要检查路径是相对路径还是绝对路径,请查找前导/。 如果没有,则需要将路径连接到基本路径。有些编程环境有一个“当前工作目录”,但是浏览器中的Javascript没有,所以你只需选择一个基本路径并坚持下去。

function full_path(my_path) {
    var base_path = "/home/Sriram/htdocs/media";
    var path_regex = /^\/.*$/;
    if(path_regex.test(my_path)) {
        return my_path;
    } else {
        return base_path + my_path;
    }
}

路径可以包含新行,javascript正则表达式.将不匹配,因此您可能希望开发更复杂的正则表达式以确保所有路径都能正常工作。但是,我认为这不属于这个答案的范围,而是我的知识。 : - )