GitHub.com标题链接 - JavaScript

时间:2015-03-03 23:45:03

标签: javascript regex github utf-8 encode

有谁知道GitHub.com使用哪种正确的官方算法来编码内部标题的fragment_id链接?

(我希望这不再被视为太宽泛的问题了。)

我反向设计GitHub如何调整Markdown格式链接到内容标题。这似乎很奇怪,所以我猜我做错了。也许你已经知道如何改进它(除了链接,这里为了可读性而跳过了)。

首先我发现了这样一个字符串 1.2.3-a Łukasz_testing? header `special characters`;.,links How+they%20 behave 将被编码为 123-a-%C5%81ukasz_testing-header-special-characterslinks-howthey20-behave

我用:

重新创建了相同的结果
function(string) {
    string = string.replace(/[A-Z]+/g,function(v) { return v.toLowerCase(); });
    string = string.replace(/[^a-z0-9-\s\u00BF-\u1FFF\u2C00-\uD7FF\w]+/g,'');
    string = string.replace(/[\s\t ]+/g, '-');
    string = encodeURIComponent(string);
    return string;
}

但它看起来很笨重。任何想法与原作有多接近?

1 个答案:

答案 0 :(得分:1)

我同意@elclanrs,链接看起来更简洁:

function(string) {
    return encodeURIComponent(string.replace(/[A-Z]+/g,function(v) { return v.toLowerCase(); })
                                    .replace(/[^a-z0-9-\s\u00BF-\u1FFF\u2C00-\uD7FF\w]+/g,'')
                                    .replace(/[\s\t ]+/g, '-'));
}

我不会寻找一个“明智的”实现(例如“一个正则规则来统治它们”),这个实现简单易读 - 这样可以很容易维护。