【问题标题】:javascript regexp, select from certain type of urljavascript regexp,从特定类型的 url 中选择
【发布时间】:2013-12-20 16:01:39
【问题描述】:

我正在使用 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 我应该解决什么问题?

谢谢。

【问题讨论】:

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

标签: javascript regex url select


【解决方案1】:

试试这个:

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)){

【讨论】:

    【解决方案2】:

    您使用的模式无效,它仅匹配 one character 后跟 / 后跟 one digit

    尝试使用这种模式:

    图案

    /^\/[a-z]+?\/\d+$/
    

    输入

    1. /name/name/121
    2. /name/123
    

    输出

    1. false
    2. true
    

    【讨论】:

      【解决方案3】:

      我稍微修改了 nnnnnn 的版本,添加了一个量词:(this pattern){n times},它给出了/^(\/[^/]+){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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-11
        • 1970-01-01
        • 1970-01-01
        • 2018-03-28
        • 1970-01-01
        • 2013-07-13
        • 2013-04-22
        • 1970-01-01
        相关资源
        最近更新 更多