javascript regexp,从某种类型的网址中选择

时间:2013-12-04 08:48:52

标签: javascript regex url select

我正在使用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来解决这个问题?

谢谢。

3 个答案:

答案 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