lib/routing/routeCompiler.js
function computeRegexp(tokens, index, firstOptional) {
    var token = tokens[index];
    if ('text' === token[0]) {
        // Text tokens
        return str.regexQuote(token[1]);
    } else {
        // Variable tokens
        if (0 === index && 0 === firstOptional) {
            // When the only token is an optional variable token, the separator is required
            return str.regexQuote(token[1]) + '(?P<' + token[3] + '>' + token[2] + ')?';
        } else {
            var regexp = str.regexQuote(token[1]) + '(?P<' + token[3] + '>' + token[2] + ')';
            if (index >= firstOptional) {
                // Enclose each optional token in a subpattern to make it optional.
                // "?:" means it is non-capturing, i.e. the portion of the subject string that
                // matched the optional subpattern is not passed back.
                regexp = "(?:" + regexp;
                var nbTokens = tokens.length;
                if (nbTokens - 1 == index) {
                    // Close the optional subpatterns
                    regexp += ")?".repeat(nbTokens - firstOptional - (0 === firstOptional ? 1 : 0));
                }
            }

            return regexp;
        }
    }
}
function computeRegexp(tokens, index, firstOptional) {
    var token = tokens[index];
    if ('text' === token[0]) {
        // Text tokens
        return str.regexQuote(token[1]);
    } else {
        // Variable tokens
        if (0 === index && 0 === firstOptional) {
            // When the only token is an optional variable token, the separator is required
            return str.regexQuote(token[1]) + '(?P<' + token[3] + '>' + token[2] + ')?';
        } else {
            var regexp = str.regexQuote(token[1]) + '(?P<' + token[3] + '>' + token[2] + ')';
            if (index >= firstOptional) {
                // Enclose each optional token in a subpattern to make it optional.
                // "?:" means it is non-capturing, i.e. the portion of the subject string that
                // matched the optional subpattern is not passed back.
                regexp = "(?:" + regexp;
                var nbTokens = tokens.length;
                if (nbTokens - 1 == index) {
                    // Close the optional subpatterns
                    regexp += ")?".repeat(nbTokens - firstOptional - (0 === firstOptional ? 1 : 0));
                }
            }

            return regexp;
        }
    }
}
function computeRegexp ( tokens , index , firstOptional ) { var token = tokens [ index ] ; if ( 'text' === token [ 0 ] ) { // Text tokens return str . regexQuote ( token [ 1 ] ) ; } else { // Variable tokens if ( 0 === index && 0 === firstOptional ) { // When the only token is an optional variable token, the separator is required return str . regexQuote ( token [ 1 ] ) + '(?P<' + token [ 3 ] + '>' + token [ 2 ] + ')?' ; } else { var regexp = str . regexQuote ( token [ 1 ] ) + '(?P<' + token [ 3 ] + '>' + token [ 2 ] + ')' ; if ( index >= firstOptional ) { // Enclose each optional token in a subpattern to make it optional. // "?:" means it is non-capturing, i.e. the portion of the subject string that // matched the optional subpattern is not passed back. regexp = "(?:" + regexp ; var nbTokens = tokens . length ; if ( nbTokens - 1 == index ) { // Close the optional subpatterns regexp += ")?" . repeat ( nbTokens - firstOptional - ( 0 === firstOptional ? 1 : 0 ) ) ; } } return regexp ; } } }
Computes the regexp used to match a specific token. It can be static text or a subpattern.

@param {Array}  tokens        The route tokens
@param {Number} index         The index of the current token
@param {Number} firstOptional The index of the first optional token

@return string The regexp pattern for a single token
Computes the regexp used to match a specific token . It can be static text or a subpattern .