我正在使用javascript制作网址过滤器
我从网址
获取参数parameter 1 = /name/123
//description /text/number
parameter 2 = /name/name/121
//description /text/text/number
var filter = /[/a-z][/][0-9]/;
if(filter.test(page) == true){
//do code;
}
我选择参数1,但它也选择参数2。
我应该分别选择唯一的参数1或参数2来解决这个问题?
谢谢。
答案 0 :(得分:0)
试试这个:
var filter = /^\/[^/]+\/\d+$/;
// or
var filter = /^\/[a-z]+\/\d+$/i;
也就是说你可以匹配:
^ beginning of string
\/ a / (escaped for the regex literal)
[^/]+ one or more non-slash characters in a row, or
[a-z]+ one or more letters in a row
\/ another slash
\d+ one or more digits
$ end of string
另请注意,您的if
测试不需要==true
部分,您只需说:
if(filter.test(page)){
答案 1 :(得分:0)
您使用的模式无效,仅与one character
匹配,后跟/
后跟one digit
。
尝试使用此模式:
<强>模式强>
/^\/[a-z]+?\/\d+$/
<强> INPUT 强>
1. /name/name/121
2. /name/123
<强>输出强>
1. false
2. true
答案 2 :(得分:0)
我通过添加量词(this pattern){n times}
略微修改了nnnnnn的版本,它给出了/^(\/[^/]+){n}\/\d+$/
。有关详细信息,请参阅nnnnnn's answer。
function createRegex(n) {
return new RegExp(
'^(\\/[^/]+){' + n + '}\\/\\d+$'
);
}
var twoParts = createRegex(2);
twoParts.test('/part1/part2/123'); // true
twoParts.test('/part1/part2/part3/123'); // false
将网址拆分为多个部分:
var parts = '/part1/part2/123'.match(/[^/]+/g);
var part1 = parts[0]; // "part1"
var part2 = parts[1]; // "part2"
var part3 = parts[2]; // "123"
但请注意,match
会在失败的情况下返回null
。