UNPKG

weex-nuke

Version:

基于 Rax 、Weex 的高性能组件体系 ~~

36 lines (29 loc) 901 B
var DIRNAME_RE = /[^?#]*\//; var DOT_RE = /\/\.\//g; var DOUBLE_DOT_RE = /\/[^/]+\/\.\.\//; var MULTI_SLASH_RE = /([^:/])\/+\//g; // Extract the directory portion of a path // dirname("a/b/c.js?t=123#xx/zz") ==> "a/b/" // ref: http://jsperf.com/regex-vs-split/2 function dirname(path) { return path.match(DIRNAME_RE)[0]; } // Canonicalize a path // realpath("http://test.com/a//./b/../c") ==> "http://test.com/a/c" function realpath(path) { // /a/b/./c/./d ==> /a/b/c/d path = path.replace(DOT_RE, '/'); /* @author wh1100717 a//b/c ==> a/b/c a///b/////c ==> a/b/c DOUBLE_DOT_RE matches a/b/c//../d path correctly only if replace // with / first */ path = path.replace(MULTI_SLASH_RE, '$1/'); // a/b/c/../../d ==> a/b/../d ==> a/d while (path.match(DOUBLE_DOT_RE)) { path = path.replace(DOUBLE_DOT_RE, '/'); } return path; } module.exports = realpath;