2015-04-27 4 views
3

Рассмотрим этот URL ниже:раскол Javascript и амперсанд спасаясь

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

Из вышеприведенного URL я extracing каждая строка значений запроса. Для строки запроса заголовка мне нужно разбить ее на символ подчеркивания «_» и заменить/соединить пробелом. Проблема заключается в том, что «&». Разделение javasript останавливается прямо на '&' и ускользает от следующего.

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

Meeting Planning дает мне

Как разбить и присоединиться к так что я получаю Meeting Planning & Participation

+6

вы должны кодировать '&' как '% 26', как это имеет особое значение в URL. –

+2

В дополнение к комментарию Даниэля, почему вы делаете split и join вместо: 'var title = vars ['Title']. Replace (" _ "," "), который не требует перевода строки в массив, тогда обратно в массив и просто итерации через строку. Я думаю, что это будет намного быстрее. – dman2306

ответ

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

4

Вы могли бы просто replace_ с пространством, как показано ниже.

"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, " "));

Смежные вопросы