2013-08-22 2 views
1
에서 내가 관리 웹 사이트가 표준 PHP URL 형식에서 이동

이 같은 더 현서 친화적 인 형식으로구문 분석 친화적 인 URL에 자바 스크립트

http://example.com/page.php?key=value&key=value... 

:이 함수를 사용했다

http://example.com/page/key/value/key/value... 

javascript를 사용하여 이전 형식의 URL 문자열을 업데이트/수정하십시오.

function UpdateQueryString(key, value, url) { 
    if (!url) url = window.location.href; 
    var re = new RegExp("([?|&])" + key + "=.*?(&|#|$)(.*)", "gi"); 

    if (re.test(url)) { 
     if (typeof value !== 'undefined' && value !== null) 
      return url.replace(re, '$1' + key + "=" + value + '$2$3'); 
     else { 
      return url.replace(re, '$1$3').replace(/(&|\?)$/, ''); 
     } 
    } 
    else { 
     if (typeof value !== 'undefined' && value !== null) { 
      var separator = url.indexOf('?') !== -1 ? '&' : '?', 
      hash = url.split('#'); 
      url = hash[0] + separator + key + '=' + value; 
      if (hash[1]) url += '#' + hash[1]; 
      return url; 
     } 
     else 
      return url; 
    } 
} 

이것은 완벽하게 작동합니다. 이제이 함수는 javascript와 regexs에서 나쁜 점을 강조합니다. 슬래시 대신 '/'를 사용하도록이 함수를 수정하려고합니다. & =. 이것은 처음 시도한 것입니다.

function myUpdateQueryString(key, value, url) 
{ 
    if (!url) url = window.location.href; 
    var re = new RegExp("([/])" + key + "(/)(.*)", "gi"); 

    if (re.test(url)) { 
     if (typeof value !== 'undefined' && value !== null) 
      return url.replace(re, '$1' + key + "/" + value + '$2$3'); 
     else { 
      return url.replace(re, '$1$3').replace(/(\/)$/, ''); 
     } 
    } 
    else { 
     if (typeof value !== 'undefined' && value !== null) { 
      var separator = '/', 
      hash = url.split('#'); 
      url = hash[0] + separator + key + '/' + value; 
      if (hash[1]) url += '#' + hash[1]; 
      return url; 
     } 
     else 
      return url; 
    }  
} 

이 기능을 사용하면 매우 가까워지고 있습니다. URL 문자열에 새로운 키/값을 추가하지만 문자열의 현재 값을 업데이트/수정하는 데 문제가 있습니다. 나는 그것의 쉬운 수정을 생각한다. 난 그냥 $ 2 $ 3 정규식과 몇 가지 다른 것들에 내 머리를 포장 문제가 있습니다.

감사

나는 내가 지금이 일 것으로 보인다 대답 을 발견 생각 :

function UpdateQueryString(key, value, url) 
{ 
    if (!url) url = window.location.href; 
    var re = new RegExp("([/])" + key + "/.*?(/|$)", "gi"); 
    var separator = '/'; 
    if (url.match(re)) { 
     return url.replace(re, '$1' + key + "/" + value + '$2'); 
    } 
    else { 
     return url + separator + key + "/" + value; 
    } 
} 

사람이 잘못 아무것도 볼 수 있습니까?

답변

0

대신 다음과 같이 할 수 있습니까?

url.split('/?|&|=/').join('/'); 

URL의 모든 물음표, 앰퍼샌드 및 등호는 슬래시로 대체해야합니다.

+0

? & and =를 바꾸려고하지 않는다. 자바 스크립트에서 URL 문자열을 조작하는 빠른 방법을 찾고 있습니다. 모든 라이브러리와 함수는 표준 page.php? key = value를 다 다루었습니다. url 구조가 page/key/value와 같을 때 url 문자열을 조작하는 방법을 찾고 있습니다. 나는 아무것도 발견하지 못했다. 그것은 내가 사용하고있는 함수가 매우 가까워서 정규식이 약간 떨어져있는 것처럼 보입니다. – user2707535

+0

그래도 몇 가지 질문이 있습니다. 1) URL 문자열을 변경한다고 말하면 브라우저의 URL 표시 줄에있는 함수 나 실제 URL로 전달되는 문자열을 의미합니까? 이전의 경우 페이지/키/값 문자열을 조작 한 후에 무엇을 수행하려고합니까? 2) 설명을 위해 쿼리 문자열을 디렉토리 구조로 또는 그 반대로 변경하려고하십니까? –

0
function UpdateQueryString(key, value, url) 
{ 
    if (!url) url = window.location.href; 
    var re = new RegExp("([/])" + key + "/.*?(/|$)", "gi"); 
    var separator = '/'; 
    if (url.match(re)) { 
     return url.replace(re, '$1' + key + "/" + value + '$2'); 
    } 
    else { 
     return url + separator + key + "/" + value; 
    } 
} 

이것은 작동하는 것처럼 보입니다. 누구든지이 점을 잘못 발견 할 수 있습니까? 나는 매우 정규 표현식이나 자바 스크립트가 좋지 않다.

관련 문제