JavaScript中的分割(split)和“&”符号转义

3

请考虑下面的URL:

http://test/Preview.aspx?By=AJ_Swift&Title=Meeting_Planning_&_Participation 

从上述URL中,我正在提取每个查询字符串的值。对于Title查询字符串,我需要在下划线'_'符号上进行分割,并用空格替换/连接起来。问题是"&"。JavaScript分割正好在'&'处停止,并转义后面的所有内容。

var title = vars['Title'].split("_").join(" ");

给我会议策划

我如何分割和合并以获得会议策划与参与


6
在URL中,"&"具有特殊含义,因此您应将其编码为"%26"。 - Daniel A. White
2
除了Daniel的评论之外,你为什么要使用split和join而不是:var title = vars['Title'].replace("_", " "),它不需要将字符串转换为数组,然后再将其转换回数组并简单地迭代字符串。我认为这样会更快。 - dmeglio
2个回答

4
你可以简单地使用空格 替换 _,就像下面这样。
"Meeting_Planning_&_Participation".replace(/_/g, " ");

整段代码:

function getParam(query, key) {
  var vars = query.split(/&(?![_])/);
  for (var i = 0; i < vars.length; i++) {
    var pair = vars[i].split("=");
    if (pair[0] == key) return pair[1];
  }
}

var url = "http://test/Preview.aspx?By=AJ_Swift&Title=Meeting_Planning_&_Participation";
var query = url.replace(/.*?\?/, "");
var title = getParam(query, "Title");
alert(title.replace(/_/g, " "));


2
function getQueryVariable(url, query) {

  url = url.replace(/.*?\?/, "");
  url = url.replace(/_&_/, "_%26_");

    var vars = url.split('&');
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split('=');
        if (decodeURIComponent(pair[0]) == query) {
            return decodeURIComponent(pair[1]);
        }
    }
    console.log('Query variable %s not found', variable);
}

使用方法:
var url = "http://test/Preview.aspx?By=AJ_Swift&Title=Meeting_Planning_&_Participation "
var By = getQueryVariable(url, 'By');
var Title = getQueryVariable(url, 'Title');
Title = Title.replace(/_/ig, " ");

console.log(By);
console.log(Title);

输出:

AJ_Swift
Meeting Planning & Participation

演示:

http://codepen.io/tuga/pen/VLYyyL



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接