【问题标题】:Javascript Regex: Get everything from inside / tagsJavascript 正则表达式:从内部/标签中获取所有内容
【发布时间】:2010-10-26 22:55:14
【问题描述】:

我想要什么


从上面的subject我想得到search=adam和page=content和message=2。

主题:


/search=adam/page=content/message=2

到目前为止我已经尝试过什么


(\/)+search+\=+(.*)\/ 

但这并不好,因为有时主题以什么都没有结束,就我而言,必须有一个/

(\/)+search+\=+(.*?)+(\/*?)

但这并不好,因为转到(\/*?) 并向我展示了/search= 之后的所有内容

工具提示:


Regex Tester

【问题讨论】:

    标签: javascript regex tags


    【解决方案1】:

    使用 String.split(),不需要正则表达式:

    var A = '/search=adam/page=content/message=2'.split('/');
    

    请注意,您可能必须使用 .slice(1) 丢弃第一个数组项。

    然后您可以使用类似的方式遍历名称-值对:

    for(var x = 0; x < A.length; x++) {
        var nameValue = A[x].split('=');
        if(nameValue[0] == 'search') {
            // do something with nameValue[1]
        }
    }
    

    这假设值中没有等号。希望是这样,但如果不是,您可以使用nameValue.slice(1).join('=') 而不是nameValue[1];

    【讨论】:

      【解决方案2】:

      向我展示 /search= 之后的所有内容

      你使用了一个贪婪的.*,它也很乐意匹配斜线。您可以使用非贪婪的.*?,或不包括斜杠的字符类:

      (\/|^)search=([^\/]*)(\/|$)
      

      这里的开头和结尾可以是斜杠,也可以是字符串的开头/结尾 (^/$)。 (我删除了+s,因为我根本无法弄清楚他们应该做什么。)

      或者,忘记正则表达式:

      var params= {};
      var pieces= subject.split('/');
      for (var i= pieces.length; i-->0;) {
          var ix= pieces[i].indexOf('=');
          if (ix!==-1)
              params[pieces[i].slice(0, ix)]= pieces[i].slice(ix+1);
      }
      

      现在你可以直接说params.search、params.page 等等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-24
        • 1970-01-01
        • 1970-01-01
        • 2011-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多