다음은 Script House에서 사용하고 있는 여러 가지 방법입니다
다음은 정규 함수입니다
Javascript 규칙성을 사용하여 URL 링크의 구문 분석 클래스 구현
http: //www.jb51.net/article/15000.htm
다음 코드는 약간 지저분합니다
/* "The Definitive Guide to JavaScript"에서는 정규 매개변수 없이 URL 매개변수를 가져오는 보다 간결한 방법을 소개합니다. 루프를 사용하는 표현식. 한 번에 객체를 반환할 때의 장점은 이 함수를 한 번만 호출하면 된다는 것입니다. 매개변수와 값 쌍은 객체에 저장될 수 있으며, 다른 매개변수의 값을 얻기 위해 이 함수를 다시 호출할 필요가 없습니다. 앞으로는 객체의 속성만 가져오면 됩니다.
* 사용법:
* var args = getArgs( ); // URL에서 매개변수를 구문 분석합니다.
* var q = args.q || // 매개변수가 정의된 경우 해당 값을 사용하고, 그렇지 않으면 기본값을 지정합니다.
* var n = args.n ?parseInt(args.n) : 10;
*/
var getArgs = function ()
{
var args = new Object( ); 🎜 >var query = window.location.search.substring(1); // http://www.snowpeak.org/testjs.htm?a1=v1&a2=&a3=v3#anchor에서 가로채는 것과 같은 쿼리 문자열을 가져옵니다. a1=v1&a2=&a3=v3.
var pair = query.split("&"); // 앰퍼샌드로 배열로 분리
for(var i = 0; i < pair.length; i ) {
var pos = pair [ i].indexOf('='); // "name=value" 쌍을 찾습니다.
if (pos == -1) continue; // 쌍이 없으면 루프에서 빠져나와 계속합니다. 다음 쌍
var argname = pair[i].substring(0,pos); // 매개변수 이름 가져오기
var value = pair[i].substring(pos 1); // 매개변수 값 가져오기
value = decodeURIComponent(value) ; // 필요한 경우 디코딩
args[argname] = value; // 객체의 속성으로 저장
}
// 이 객체를 반환합니다. >}
프로그램에서 추출 작업을 한 번만 수행하면 되고, 향후 매개변수 값을 반복해서 얻으면 프로그램을 다시 실행할 필요가 없다는 것이 가장 큰 장점입니다. 이런 방식으로 URL 매개변수를 얻는 것이 더 쉽고 이해하기 쉽습니다.
다음은 이전에 게시한 "루프 없음"이지만 "다소 너무 복잡한" 버전입니다.
코드 복사
코드는 다음과 같습니다.
//루프 없이 URL에서 매개변수 값을 가져오려면 정규 표현식을 사용하세요. 루프 교체의 핵심 기술은 문자열의 replacement() 메소드가 함수를 두 번째 매개변수로 사용하여 사용자 정의 방식으로 교체할 수 있다는 것입니다.
//이 매개변수 이름은 있지만 값이 없는 경우 해당 매개변수 이름이 없으면 빈 문자열이 반환됩니다.
var getArg = function(argname)
{
var str = location.href;
var submatch;
//먼저 물음표와 웰헤드 사이의 쿼리 문자열을 꺼냅니다. http://www.snowpeak.org/testjs.htm?a1=v1&a2=&a3=v3#anchor에서 잘라낸 a1=v1&a2=&a3=v3과 같은 URL입니다.
//물음표는 패턴 내 특수 문자이므로 ?;로 작성해야 합니다. 파운드 기호는 선택 사항이므로 패턴은 #?로 끝납니다.
if (submatch = str.match(/? ([^#]*) #?/))
{
//a1=v1&a2=&a3=v3 형식으로 캡처된 부분 일치를 가져오고 앞에 &를 추가하여 일반 &a1=v1&a2=&a3을 만듭니다. =v3 다음 단계에서 쉽게 교체
var argstr = '&' submatch[1]
//대체 함수를 만들고 &a1=v1 모양의 발견된 각 그룹을 a1:"v1"로 교체합니다. 이는 속성 선언과 같은 객체 정의에 사용됩니다.
var returnPattern = function(str)
{
//$1 및 $2는 문자열
에서 사용해야 하는 첫 번째 및 두 번째 캡처된 부분 일치를 나타냅니다. return str.replace (/&([^=] )=([^&]*)/, '$1:"$2",');
}
//두 번째 전역 정규 교체 실행 매개변수는 단지 정의된 대체 함수가 a1=v1&a2=&a3=v3을 a1:"v1",a2:"",a3:"v3",
argstr = argstr.replace(/&([^=] )로 대체합니다. = ([^&]*)/g, returnPattern);
//마지막으로 var retvalue = {a1:"v1",a2:"" 형식이어야 하는 객체 선언을 실행합니다. ,a3:"v3"} ; 객체 선언, 방금 교체한 문자열 끝에 쉼표가 있습니다. substr
eval('var retvalue = {' argstr.substr(0, argstr.length-1 ) '};');
//이제 URL의 각 매개변수 이름은 해당 속성 이름이고 매개변수 값은 해당 속성 값입니다.
return retvalue[argname ];
}
}
//테스트
document.write('a1=' getArg('a1') ', a2=' getArg('a2') ', a3 =' getArg('a3 '))