[英]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.