2013-11-22 9 views
2

У меня есть строка видаИзвлечение значения подстроки параметров из строки

p1=v11&p1=v12&p2=v21&p2=v22&p2=v23&p3=v31 and so on 

Я хочу, чтобы получить массив всех значений для р2 в JavaScript, например, в этом примере это будут ["v21", "v22", "v23"].

Как это сделать? Нужно ли использовать регулярное выражение?

+2

Попробуйте с '/ p2 = ([^ &] +)/G' – elclanrs

+1

возможно дубликат [Как я могу получить значения строки запроса в JavaScript?] (http://stackoverflow.com/q/901115/1503018) – sectus

ответ

0

Попробуйте это:

var string = 'p1=v11&p1=v12&p2=v21&p2=v22&p2=v23&p3=v31'; 
var rawParams = string.split('&'); 
var params = []; 
var param = ''; 

for (var i in rawParams) { 
    param = rawParams[i].split('='); 
    if ('p2' == param[0]) { 
     params.push(param[1]); 
    } 
} 

Я не рекомендую RegExp здесь, поскольку эта проблема довольно легко решить с помощью одной простой for цикла.

EDIT:
Ради любых ненавистников - вот рабочий пример: http://jsfiddle.net/j7sY6/1/

+5

Может ли автор '-1' проявить себя и объяснить, что он находит не так в моем ответе? – matewka

+0

^^ Кодовые работы: http://jsbin.com/EfeXIjor/1/edit – elclanrs

+0

Конечно. – matewka

2

Вы можете взглянуть на функцию JavaScript я написал, чтобы имитировать функцию $_GET в PHP:

http://www.martinandersson.com/matooltip/js/ma_GET.js

Google исходный код для этой линии:

returnMe[key] = $.parseJSON(decodeURIComponent(tmpArray[1])); 

Проблема с моей текущей реализацией заключается в том, что любой старый ключ, уже сохраненный, будет перезаписан. Вам нужно проверить, присутствует ли ключ, если это так, прочитайте старое значение и сохраните его обратно в массиве, прежде чем нажимать новое значение на тот же массив.

В конкретной строке, которую я цитировал, используется JQuery для внесения значения в объект JavaScript. Если вы не хотите использовать JQuery для этой функции, вы можете использовать JSON.parse или какую-либо другую стороннюю библиотеку.

Надеюсь, что это поможет, напишите мне комментарий, если вам это не удастся, и я вернусь к вам.

0

Для регулярных выражений решения:

var matchs = []; 
var re = /p2=([^&]+)/g; 
while (match = re.exec('p1=v11&p1=v12&p2=v21&p2=v22&p2=v23&p3=v31')) { 
    matchs.push(match[1]); 
} 

Выход:

matches = ["v21", "v22", "v23"] 
+0

Только что заметил, что elclanrs предложил это регулярное выражение 40 минут назад .. – OGHaza

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