Javascript Regex:从内部/标签获取所有内容

时间:2010-10-26 22:55:14

标签: javascript regex tags

我想要什么


从上面的subject我想得到search=adampage=content以及message=2

主题:


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

到目前为止我尝试了什么


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

但这并不好,因为有时主题没有结束,在我的情况下必须有/

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

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

工具提示:


Regex Tester

2 个答案:

答案 0 :(得分:3)

使用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];

答案 1 :(得分:2)

  

向我展示了/ search =

之后的所有内容

你使用了一个贪婪的.*,它也可以很好地匹配斜杠。您可以使用非贪婪的.*?或排除斜杠的字符类:

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

这里的正面和结尾可以是斜线或字符串的开始/结束(^ / $)。 (我删除了+,因为我无法解决他们应该做的事情。)

或者,忘记正则表达式:

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.searchparams.page等。