Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript regexp,从特定类型的url中选择_Javascript_Regex_Url_Select - Fatal编程技术网

javascript regexp,从特定类型的url中选择

javascript regexp,从特定类型的url中选择,javascript,regex,url,select,Javascript,Regex,Url,Select,我正在使用javascript制作一个url过滤器 我从url获取一个参数 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

我正在使用javascript制作一个url过滤器

我从url获取一个参数

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

谢谢。

试试这个:

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
还要注意,如果测试不需要==true部分,您可以说:

if(filter.test(page)){

您使用的模式无效,它只匹配一个字符后跟/后跟一个数字

尝试使用以下模式:

图案

输入

输出


我稍微修改了nnnnnn的版本,添加了一个量词:这个模式{n次}给出了/^\/[^/]+{n}\/\d+$/。有关更多详细信息,请参阅

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
要将url拆分为多个部分,请执行以下操作:

var parts = '/part1/part2/123'.match(/[^/]+/g);
var part1 = parts[0]; // "part1"
var part2 = parts[1]; // "part2"
var part3 = parts[2]; // "123"
但是要小心,如果失败,match将返回null。

您使用的模式无效,它只匹配一个字符后跟一个数字
1. false
2. true
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"