1

所以我使用正则表达式从字符串中获取信息,问题是我需要/在字符串中的 a 处启动和停止。

这是一个例子

var regexp = /\/(.*?)=(.*?)\//g;
    var url_hash = "/s=lorem+ipsum/p=2/";
    var match;
    var result = {};
    while ((match = regexp.exec(url_hash)) != null) {
     result[match[1]] = match[2];
  }

我可以result['s']毫无问题地抓取,但抓取变得有问题,因为forresult['p']的结尾/与 forresult['s']的开头相同。如果我将字符串更改为它可以完美地工作,但这当然是可怕的。那么我该如何解决这个问题,使其既能结束又能在? 我被卡住了,任何帮助表示赞赏。/result['p']/s=lorem+ipsum//p=2//

4

3 回答 3

1

为什么你不能只是split它?

var result = {};
var url = "/#!/s=lorem+ipsum/p=2/".slice(4, -1).split('/');

for (i in url) {
  var value = url[i].split('=');
  result[value[0]] = value[1];
}

console.log(result);
于 2012-06-03T06:27:09.673 回答
1

使用这个正则表达式:

/\/([^/=]+)=([^/]+)/

代码:

var regexp = /\/([^/=]+)=([^/]+)/g;
var url_hash = "/#!/s=lorem+ipsum/p=2/";
var match;
var result = {};
while ((match = regexp.exec(url_hash)) != null) {
   result[match[1]] = match[2];
   document.writeln(match[1] + ' = ' + match[2] + '<br>');
}

输出:

s = lorem+ipsum
p = 2

Online demo of the code

于 2012-06-03T06:27:46.273 回答
1

您可以在自己之后确定零件的前瞻集,=而不是将其添加到正则表达式中。前瞻集是“除正斜杠之外的所有内容”。

var regexp = /\/(\w+)=([^/]+)/g;

顺便说一句,我假设之前的部分=是类似单词的(即字母数字)

于 2012-06-03T06:28:50.147 回答