CocosCreator 源码​core/utils/CCPath.js详解

require('../platform/CCSys');
/* 扩展名 */var EXTNAME_RE = /(\.[^\.\/\?\\]*)(\?.*)?$/;/* 路径名 */var DIRNAME_RE = /((.*)(\/|\\|\\\\))?(.*?\..*$)?/;
var NORMALIZE_RE = /[^\.\/]+\/\.\.\//;/* [^\.\/]解释:除了. 和 /的元素
\/\.\.\/ 解释 /../*/
/** * !#en The module provides utilities for working with file and directory paths * !#zh 用于处理文件与目录的路径的模块 * @class path * @static */cc.path = /** @lends cc.path# */{    /**     * !#en Join strings to be a path.     * !#zh 拼接字符串为 Path     * @method join     * @example {@link cocos2d/core/utils/CCPath/join.js}     * @returns {String}     */    /* 注意下面的replace表达的是,参数以斜杠 和反斜杠结尾的 ,替换为空串 */    join: function () {        var l = arguments.length;        var result = "";        for (var i = 0; i < l; i++) {            result = (result + (result === "" ? "" : "/") + arguments[i]).replace(/(\/|\\\\)$/, "");        }        return result;    },    /* 在字符串中,两个反斜杠被解释为一个反斜杠,然后在作为正则表达式, \\ 则被正则表达式引擎解释为 \,所以在正则表达式中需要使用四个反斜杠。     也就是说,前两个反斜杠在字符串中被解释为一个反斜杠,后两个也被解释为一个反斜杠,这时解释完毕后变成两个反斜杠,再由正则表达式解释两个反斜杠,就又解释成了一个反斜杠,所以,在正则表达式中要匹配一个反斜杠时,需要四个反斜杠。    同理,要匹配点号时,需要在点号之前加上两个反斜杠,否则将被正则表达式当作一个点号,一个点号在正则表达式中表示匹配任意字符了。 */
    /**     * !#en Get the ext name of a path including '.', like '.png'.     * !#zh 返回 Path 的扩展名,包括 '.',例如 '.png'。     * @method extname     * @example {@link cocos2d/core/utils/CCPath/extname.js}     * @param {String} pathStr     * @returns {*}     */    extname: function (pathStr) {        var temp = EXTNAME_RE.exec(pathStr);        return temp ? temp[1] : '';    },
    /**     * !#en Get the main name of a file name     * !#zh 获取文件名的主名称     * @method mainFileName     * @param {String} fileName     * @returns {String}     * @deprecated     */    mainFileName: function (fileName) {        if (fileName) {            var idx = fileName.lastIndexOf(".");            if (idx !== -1)                return fileName.substring(0, idx);//获取从头到最后一个点的所有name名称        }        return fileName;    },
    /**     * !#en Get the file name of a file path.     * !#zh 获取文件路径的文件名。     * @method basename     * @example {@link cocos2d/core/utils/CCPath/basename.js}     * @param {String} pathStr     * @param {String} [extname]     * @returns {*}     */    basename: function (pathStr, extname) {        //假如路径下有问号,则截取0到index        var index = pathStr.indexOf("?");        if (index > 0) pathStr = pathStr.substring(0, index);        var reg = /(\/|\\)([^\/\\]+)$/g;        /* 把斜杠和反斜杠结尾,替换为空 */        var result = reg.exec(pathStr.replace(/(\/|\\)$/, ""));        if (!result) return pathStr;        var baseName = result[2];        if (extname && pathStr.substring(pathStr.length - extname.length).toLowerCase() === extname.toLowerCase())            return baseName.substring(0, baseName.length - extname.length);        return baseName;    },
    /**     * !#en Get dirname of a file path.     * !#zh 获取文件路径的目录名。     * @method dirname     * @example {@link cocos2d/core/utils/CCPath/dirname.js}     * @param {String} pathStr     * @returns {*}     */    dirname: function (pathStr) {        var temp = DIRNAME_RE.exec(pathStr);        return temp ? temp[2] : '';    },
    /**     * !#en Change extname of a file path.     * !#zh 更改文件路径的扩展名。     * @method changeExtname     * @example {@link cocos2d/core/utils/CCPath/changeExtname.js}     * @param {String} pathStr     * @param {String} [extname]     * @returns {String}     */    changeExtname: function (pathStr, extname) {        extname = extname || "";        var index = pathStr.indexOf("?");        var tempStr = "";        if (index > 0) {            tempStr = pathStr.substring(index);//问号后面的东西,最后还要给加上            pathStr = pathStr.substring(0, index);//问号前的所有string        }        index = pathStr.lastIndexOf(".");//假如没有点。直接添加计划修改的扩展名和 问号后面的内容        if (index < 0) return pathStr + extname + tempStr;        return pathStr.substring(0, index) + extname + tempStr;    },    /**     * !#en Change file name of a file path.     * !#zh 更改文件路径的文件名。     * @example {@link cocos2d/core/utils/CCPath/changeBasename.js}     * @param {String} pathStr     * @param {String} basename     * @param {Boolean} [isSameExt]     * @returns {String}     */    changeBasename: function (pathStr, basename, isSameExt) {        /* 假如basename有点,替换pathStr的扩展名为 basename */        if (basename.indexOf(".") === 0) return this.changeExtname(pathStr, basename);        /* 路径有问号 */        var index = pathStr.indexOf("?");        var tempStr = "";        var ext = isSameExt ? this.extname(pathStr) : "";        if (index > 0) {            tempStr = pathStr.substring(index);//问号后面的内容            pathStr = pathStr.substring(0, index);//问号前面的内容        }        index = pathStr.lastIndexOf("/");//最后一个路径标识位置        index = index <= 0 ? 0 : index + 1;        return pathStr.substring(0, index) + basename + ext + tempStr;    },    //todo make public after verification    //待核实后公开    _normalize: function (url) {        var oldUrl = url = String(url);
        //removing all ../        do {            oldUrl = url;            url = url.replace(NORMALIZE_RE, "");        } while (oldUrl.length !== url.length);        return url;    },
    // The platform-specific file separator. '\\' or '/'.    // 特定于平台的文件分隔符。 '\\' 或者 '/'。    sep: (cc.sys.os === cc.sys.OS_WINDOWS ? '\\' : '/'),
    // @param {string} path    /* 假如结尾是斜线或者反斜线,替换为空串 */    stripSep(path) {        return path.replace(/[\/\\]$/, '');    }};
module.exports = cc.path;

cocosCreator源码详解52

cocos49

游戏49

源码50

cocosCreator51

cocosCreator源码详解 · 目录

上一篇cocoscreator3.7.3构建打包apk环境配置下一篇CocosCreator 源码​cocos2d/core/utils/profiler/CCProfiler.js详解

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值