2013-03-19 3 views
1

Гуру RegExp, прислушайтесь ко мне!RegEx: Извлечь переменную GET из URL

Это, наверное, очень просто, но я нарисовал себя в ментальном уголке.

Принимая обычный URL-адрес, разделяйте после ?, который дает строку, такую ​​как variable=val&interesting=something&notinteresting=somethingelse. Я хочу извлечь значение interesting.

Имя переменной, в которой я заинтересован, может быть подстрокой другой переменной. Так что матч должен быть

  • либо начало строки или «&» характер
  • следует «интересно =»
  • следует строки, я хочу, чтобы захватить
  • следуют либо другому "& "или конец строки

Я пытался что-то вдоль линий [\^&]interesting=(.*)[&$] , но я ничего не получил ...

Update Это будет работать в аддон Firefox на каждый запрос получить, а это означает, что Jquery не доступен, и если это возможно, я хотел бы избежать дополнительных манипуляций со строками, вызванные запись функции.

Для меня это чувствует, как общую «извлекает часть строки с регулярным выражением», но, возможно, я ошибаюсь (RegEx явно не моя сильная сторона)

+0

Не изобретайте велосипеды, пользуйтесь библиотекой: http://blog.stevenlevithan.com/archives/parseuri – georg

+0

Непонятно в исходном вопросе, но это должно использоваться внутри дополнения Firefox (потому что я действительно думал, что будет чистое решение RegEx), и из-за различных внутренних причин мне бы очень хотелось избежать написания funciton, чтобы извлечь это по соображениям эффективности. – danneth

ответ

1

простым решением

var arr = "variable=val&interesting=something&notinteresting=somethingelse".split("&"); 
for(i in arr) { 
var splits = arr[i].split("="); 
if(splits[0]=="interesting") alert(splits[1]); 
} 

также одиночная линия матч

"variable=val&interesting=something&notinteresting=somethingelse".match(/(?:[&]|^)interesting=((?:[^&]|$)+)/)[1] 
+0

Совпадение одной строки не работает, если я изменяю порядок 'интересный' и 'notinteresting', тогда он дает значение' somethingelse' вместо желаемого 'something'. Но это близко к тому, что я искал – danneth

+0

отредактировал regex :) он должен теперь работать –

+0

Отлично! Протестировано с нужным полем в начале, середине и конце строки, и все работает. Спасибо. – danneth

0
function getValue(query) 
{ 
var obj=location.search.slice(1), 
    array=obj.split('&'), 
    len=array.length; 
    for(var k=0;k<len;k++) 
    { 
     var elm=array[k].split('='); 
     if(elm[0]==query)return elm[1]; 
    } 

} 

Эта функция непосредственно извлечь URL запроса и возвращает соответствующий Валу e если есть.

//usage 
var get=getValue('interesting'); 
console.log(get);//something 
Смежные вопросы