Javascript 具有多个条件的正则表达式
Javascript Regular Expression with multiple conditions
我正在使用 Nginx njs 模块进行一些 url 修改。
我的用例是 return 给定 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/
。这样上面的 URI 将被转换为:
/ebooks
/ebooks/economic-genious
/ebooks/flight-mechanics
Javascript代码:
function getMappedURI(uri) {
var exp = new RegExp('/books/(.*)|/books$');
var destUri = '/ebooks/';
var redirectUri = uri.replace(exp, destUri);
return redirectUri;
}
以上代码适用于以下 URI:
/books/economic-genious
/books/flight-mechanics
但对于 URI /books
,它应该 return /ebooks/
。但是它在 /ebooks/
.
的末尾附加了一些不可打印的特殊字符
我认为它试图用一些特殊字符替换
。
如何避免在末尾添加特殊字符?
OR |
运算符仅适用于括号。所以你应该匹配 (/books/(.*)|/books$)
我不认为 $
这个词匹配,因为要匹配任何东西它也应该在括号中,使新匹配 URL :(/books/(.*)|/books)
。然后,您必须使用 $2 而不是 $1 作为替代品。
function getMappedURI(uri) {
var exp = new RegExp('(/books/(.*)|/books)');
var destUri = '/ebooks/';
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/';
var redirectUri = uri.replace(exp, destUri);
return redirectUri;
}
试试这个正则表达式:\/books(\/(.*))?$
Demo 这里...
代码:
function getMappedURI(uri) {
var exp = new RegExp('\/books(\/(.*))?$');
var destUri = '/ebooks';
var redirectUri = uri.replace(exp, destUri);
return redirectUri;
}
我正在使用 Nginx njs 模块进行一些 url 修改。
我的用例是 return 给定 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/
。这样上面的 URI 将被转换为:
/ebooks
/ebooks/economic-genious
/ebooks/flight-mechanics
Javascript代码:
function getMappedURI(uri) {
var exp = new RegExp('/books/(.*)|/books$');
var destUri = '/ebooks/';
var redirectUri = uri.replace(exp, destUri);
return redirectUri;
}
以上代码适用于以下 URI:
/books/economic-genious
/books/flight-mechanics
但对于 URI /books
,它应该 return /ebooks/
。但是它在 /ebooks/
.
我认为它试图用一些特殊字符替换 。
如何避免在末尾添加特殊字符?
OR |
运算符仅适用于括号。所以你应该匹配 (/books/(.*)|/books$)
我不认为 $
这个词匹配,因为要匹配任何东西它也应该在括号中,使新匹配 URL :(/books/(.*)|/books)
。然后,您必须使用 $2 而不是 $1 作为替代品。
function getMappedURI(uri) {
var exp = new RegExp('(/books/(.*)|/books)');
var destUri = '/ebooks/';
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/';
var redirectUri = uri.replace(exp, destUri);
return redirectUri;
}
试试这个正则表达式:\/books(\/(.*))?$
Demo 这里...
代码:
function getMappedURI(uri) {
var exp = new RegExp('\/books(\/(.*))?$');
var destUri = '/ebooks';
var redirectUri = uri.replace(exp, destUri);
return redirectUri;
}