te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - JS: Remove leading slashes, dots from relative path - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - JS: Remove leading slashes, dots from relative path - Stack Overflow

programmeradmin4浏览0评论

Using Javascript how would I remove any number of "../" from a relative path?

For instance:

Before - '../../../folder1/folder2/my-file.php'
After  - 'folder1/folder2/my-file.php'

Before - '../folder1/my-file.php'
After  - 'folder1/my-file.php'

I've searched multiple keywords both here and at Google and can't seem to find a Javascript based solution, most are PHP which is not what I'm needing. Also, I'd like to avoid a regex solution if possible.

Any help would be appreciated, thanks!

Using Javascript how would I remove any number of "../" from a relative path?

For instance:

Before - '../../../folder1/folder2/my-file.php'
After  - 'folder1/folder2/my-file.php'

Before - '../folder1/my-file.php'
After  - 'folder1/my-file.php'

I've searched multiple keywords both here and at Google and can't seem to find a Javascript based solution, most are PHP which is not what I'm needing. Also, I'd like to avoid a regex solution if possible.

Any help would be appreciated, thanks!

Share Improve this question asked Apr 3, 2012 at 8:48 BD_DesignBD_Design 2695 silver badges13 bronze badges
Add a ment  | 

6 Answers 6

Reset to default 8

Also, I'd like to avoid a regex solution if possible.

In JavaScript, a regular expression is probably the best way to do this; but you could do it with a loop instead:

var str = "../../../folder1/folder2/my-file.php";
var result = str;
while (result.substring(0, 3) === "../") {
    result = result.substring(3);
}

Using a regular expression and String#replace:

var str = "../../../folder1/folder2/my-file.php";
var result = str.replace(/^(?:\.\.\/)+/, "");

That regular expression says: Match the start of the string (^) and then one or more ../ substrings, and replace them with "" (e.g., nothing). You need the backslashes in there because both . and / are special characters in regular expression literals, but we want them to actually be . and / in your string. The (?:___) construct groups those three characters together without forming a capture group.

More on regular expressions on MDC or (much, much less clearly) in the specification.

var source = '../../../folder1/folder2/my-file.php';
    after = source.replace(/\.\.\//g, '');

console.log(after);

If you are not wedded to regular expressions you can use the string lastIndexOf method:

function pathStrip(url){
    ax= url.lastIndexOf('./')+1;
    return ax? url.substring(ax+1):url;
}

pathStrip('../../../folder1/folder2/my-file.php');

If there are no './' or '../' the string is returned unchanged.

If you are sure about your folder name to be constant you can use substring

var str = "../../../folder1/folder2/my-file.php";
var result = str.substring(str.indexOf('folder1'));
console.log(result);

If someone would like also to remove a single leading dot with multiple leading dot

use this regex

str.replace(/^(?:\.\.\/|\.\/)+/, '')

I just updated the regex that @.J. Crowder mentioned above by adding |\.\/ so it also match any "dots" followed by single "slash"

Here's a non-regex approach:

var chunks = str.split('/');
var result = '';
var alternative = [];
for(var i=0;i<chunks.length;i++)
{
    if(chunks[i] !== '.' && chunks[i]!=='..')
    {
        result += chunks[i]+(i <(chunks.length -1) ? '/' : '');
        alternative.push(chunks[i]);
    }
}
alternative = alternative.join('/');

Result and alternative will be folder1/folder2/my-file.php This is much like T.J. Crowders answer, except paths like ./somescript.php will be stripped from their initial ./ aswell... which somewhat improves safety...

发布评论

评论列表(0)

  1. 暂无评论