簡體   English   中英

Javascript 多條件正則表達式

[英]Javascript Regular Expression with multiple conditions

我正在使用 Nginx njs 模塊進行一些 url 修改。

我的用例是返回給定 uri 的重定向 uri。

URI 將如下所示:

/books
/books/economic-genious
/books/flight-mechanics

我的正則表達式匹配上述 URI 如下 -

/books/(.*)|/books$

表達式/books/(.*)的第一部分是匹配以下 URI:

/books/economic-genious
/books/flight-mechanics

表達式/books$的第二部分是匹配以下 URI:

/books 

我的目的地配置如下: /ebooks/$1 這樣上面的 URI 將被轉換為:

/ebooks
/ebooks/economic-genious
/ebooks/flight-mechanics

Javascript 代碼:

function getMappedURI(uri) {
    var exp = new RegExp('/books/(.*)|/books$');
    var destUri = '/ebooks/$1';
    var redirectUri = uri.replace(exp, destUri);
    return redirectUri;
}

上面的代碼適用於以下 URI:

/books/economic-genious
/books/flight-mechanics

但是對於 URI /books ,它應該返回/ebooks/ 但它在/ebooks/的末尾附加了一些不可打印的特殊字符。

我認為它試圖用一些特殊字符替換$1

如何避免在最后添加特殊字符?

手術室| 運算符僅適用於括號。 所以你應該匹配(/books/(.*)|/books$)並且我不認為$單詞匹配,因為任何要匹配的東西也應該在括號中,使新匹配 URL : (/books/(.*)|/books) 然后,您必須使用 $2 而不是 $1 作為替代品。

function getMappedURI(uri) {
    var exp = new RegExp('(/books/(.*)|/books)');
    var destUri = '/ebooks/$2';
    var redirectUri = uri.replace(exp, destUri);
    return redirectUri;
}

但是,如果您想要從/books/foo/ebooks/foo的所有內容,請改用: /books/(.*)和 $1 作為替代。

function getMappedURI(uri) {
    var exp = new RegExp('/books/(.*)');
    var destUri = '/ebooks/$1';
    var redirectUri = uri.replace(exp, destUri);
    return redirectUri;
}

試試這個正則表達式: \/books(\/(.*))?$

演示在這里...

代碼:

function getMappedURI(uri) {
    var exp = new RegExp('\/books(\/(.*))?$');
    var destUri = '/ebooks$1';
    var redirectUri = uri.replace(exp, destUri);
    return redirectUri;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM