2014-02-14 2 views
-1

자바 스크립트를 정규식 함수로 바꾸면 코드를 반환 할 때 항상 반환 URL의 끝에 "여분의 큰 따옴표가 있습니다."라고 경고하면 .Javascript replace w 끝 부분에 따옴표를 추가하는 Regex

<div class="postbody"> 
<a class="postlink" href="http://www.mystore.co.uk/product/upc0009384775/?referral=us-store&amp;&quot;">Faux Leather Deluxe Heated Seat Cushion</a> 
</div> 

나는 많은 것들을 시도했지만, 수 없습니다 :) 견적 내가 함수에서 링크를 반환하는 경우에만 표시되지 않는 URL는 결과 HTML은

<div class="postbody"> 
<a href="http://www.mystore.com/product/upc0009384775" class="postlink">Faux Leather Deluxe Heated Seat Cushion</a> 
</div> 
<script> 
var elements = document.getElementsByClassName('postbody'); 
for (var i=0;i<elements.length;i++) 
{ 
    elements[i].innerHTML = elements[i].innerHTML.replace(/\"((?:http:\/\/|http:\/\/www.)mystore.)([a-zA-Z.]{2,5}\/)(product\/)([A-Za-z0-9]*)/gi, 
     function(match,match2,match3,match4,match5) 
     { 
      return match2+'co.uk'+'/'+match4+match5+'/?referral=us-store&'; 
     } 
    ); 
} 
</script> 

입니다

여기에 보이는 코드를 슈퍼 단순화 한 후에도 알아낼 수 있습니다.

도움 주셔서 감사합니다.

답변

0

업데이트 : 더 나은 설명 : "포함 된 이유는 DOM 작동 방식 때문입니다. 첫 번째 일치 항목을 사용하지 않아 반환 된 문자열에서 견적이 제외되었지만 여전히 대체 중입니다. 인용 DOM을 자동으로 HTML을 수정하고 (작은 따옴표를 가지고 만있는) 반환 된 URL 주위에 따옴표를 추가합니다이 단계에서 작동하는 방법

다음의 예를 표시해야합니다.. http://jsfiddle.net/danschultzer/HAG9j/3/

것은 해결하려면 쿼리 매개 변수로 URL을 처리하지 않는 두 번째 문제는 정규식을 더 개방적으로 변경하십시오 (예 : exampl에 추가됨). 위의 e) :

/\"((?:http:\/\/|http:\/\/www.)mystore.)([a-zA-Z.]{2,5}\/)(product\/)(.*)\"/gi 

replace 메소드에서 쿼리 값을 구문 분석해야합니다. /?을 '?'로 바꿀 수 있어야합니다. & '.


정규 표현식이 끝 인용 부호와 일치하지 않기 때문입니다. 첫 번째 따옴표는 일치하지만 두 번째 것은 일치하지 않으면 올바르게 시작됩니다.

변경

/\"((?:http:\/\/|http:\/\/www.)mystore.)([a-zA-Z.]{2,5}\/)(product\/)([A-Za-z0-9]*)\"/gi 

JSFiddle에 정규식 : http://jsfiddle.net/danschultzer/HAG9j/

하지만 난 당신이 더 특정 정규식을하고도 = href를을 대상으로하는 것이 좋습니다. 물론 그것은 당신이 성취하고자하는 것에 달려 있습니다.

+0

하지만 내가 교체있어 텍스트에 종료 견적을 추가/교체 아니에요, 그래서 왜 일을 추가? 또한 일부 링크는 'upc0009384775'다음에 텍스트와 변수가 더 많으므로 끝 인용 부호와 일치하면 정규식이 작동하지 않습니다. http://jsfiddle.net/UQ3u9/ –

+0

_adding_ 하나가 아닙니다. _you_가 이미 존재하는 것을 떠나고 있습니다. – CBroe

+0

나는 내 대답 마이크를 업데이트했다. – Dan

0

정확히 무슨 일이 일어 났는지 확실하지 않습니다. 몇 가지 이유로 replace 함수를 사용하면 브라우저가 "을 반환 값에 추가합니다.

좀 더 쳐다 보았을 때, 정규 표현식이 시작 큰 따옴표를 찾고 있다는 것을 알았지 만 시작 큰 따옴표를 반환하지 않았습니다. 반환 값에 여는 따옴표를 추가하고 나면 브라우저 (또는 자바 스크립트가 확실하지 않음)가 더 이상 반환 된 문자열에 "을 추가하지 않았습니다.

<div class="postbody"> 
<a href="http://www.mystore.com/product/upc0009384775" class="postlink">Faux Leather Deluxe Heated Seat Cushion</a> 
</div> 
<script> 
var elements = document.getElementsByClassName('postbody'); 
for (var i=0;i<elements.length;i++) 
{ 
    elements[i].innerHTML = elements[i].innerHTML.replace(/\"((?:http:\/\/|http:\/\/www.)mystore.)([a-zA-Z.]{2,5}\/)(product\/)([A-Za-z0-9]*)/gi, 
    function(match,match2,match3,match4,match5) 
    { 
     return '"'+match2+'co.uk'+'/'+match4+match5+'/?referral=us-store&'; 
    } 
); 

}