我想要什么
从上面的subject
我想得到search=adam
和page=content
以及message=2
。
主题:
/search=adam/page=content/message=2
到目前为止我尝试了什么
(\/)+search+\=+(.*)\/
但这并不好,因为有时主题没有结束,在我的情况下必须有/
(\/)+search+\=+(.*?)+(\/*?)
但这并不好,因为(\/*?)
发生了变化,并向我展示了/search=
之后的所有内容
工具提示:
答案 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.search
,params.page
等。