2014-06-17 2 views
0
내가 형태로 표시 Google 캘린더 XML 피드 링크를 찾을 정규식을 사용하고

:정규식에서 여러 개의 반환 값을 사용하려면 어떻게해야합니까?

<a href="http://www.drsketchysdublin.com/event-registration/?ee=11">http://www.drsketchysdublin.com/event-registration/?ee=11</a> 

을 내가

<a href="http://www.drsketchysdublin.com/event-registration/?ee=11">drsketchysdublin</a> 

내가 사용하여 다음이를 교체하려면 정규식은 텍스트와 일치하려면 다음을 사용하여 대체

expression = //(<a\shref="https?[^>]+>(https?:\/\/www\.([^\.]+)\.com[^<]+)<\/a>)/ig; 

을하고 일을

return element.html(element.text().replace(expression, "<a href='$1' target='"+options.target+"'>$2</a>")); 

는 어디 내가 참조 할 수있는 방법 http://gabrielizaias.com/articles/jquery-urltolink-plugin/

여기에서 코드를 사용하고

([^\.]+) 

의 값으로

(https?:\/\/www\.([^\.]+)\.com[^<]+)<\/a>) 

와 $ 2 값으로 $ 1을 (를) 원하는 정규식에서 반환 된 두 값은? 표현식 [0]과 같은 것을 시도했지만 행운은 없습니다.

+0

먼저 정규 표현식이 정확하게 일치하는지 확인하십시오. (또한 많은 응답은 HTML을 탐색하기 위해 Regex를 사용하는 것을 비판 할 것입니다. 이는 JQuery의 선택자가 완벽하기 때문입니다. – Katana314

+0

꽤 확실합니다 - [Rad Softare Regex Designer] (http : // rad-software-regular -expression-designer.software.informer.com/1.4/) 테스트하십시오. 두 번째 요점에 관해서는 아마 맞을지 모르지만 정규 표현식을 사용하여 도메인 이름을 추출해야만 전체적인 용도로 사용할 수있을 것이라고 생각했습니다. – looeee

답변

0

바꾸기 위해 두 번째 인수로 함수를 사용할 수 있습니다. 이 함수는 표현식의 인수를 허용합니다. 인수는 (전체 일치, [항목 캡처,] 일치 오프셋, 원래 문자열)입니다. 이 기능에는 여러 캡처 항목이있을 수 있습니다. 간단한 예 :

var testItem = '[email protected]'; 
var expression = new RegExp(/^([^@]+)@([^@]+)$/) 
var returnItem = testItem.replace(expression, function(full_match, $1, $2, offset, original){ 
    console.log('full match: '+full_match) 
    console.log('$1: '+$1) 
    console.log('$2: '+$2) 
    console.log('offet: '+offset) 
    console.log('original: '+original) 
    return (typeof $1 != "undefined" && typeof $2 != "undefined") ? $1+','+$2 : false; 
}); 
if (returnItem !== false) console.log(returnItem.split(',')) 
else console.log('bad return value'); 

코드 조각은 단순한 문자열, @ 기호의 양쪽에있는 항목을 잡고 식을 선언하고 그들이 분석 한 후 두 일치하는 항목을 반환하는 대신 함수를 사용합니다. 리턴 함수의 콘솔 로그는 각 변수가 보유하고있는 것을 보여줍니다.

full match: [email protected] 
$1: test1 
$2: test2 
offet: 0 
original: [email protected] 
["test1", "test2"] 

당신은 작은 수정하여 정규 표현식의 반환을 구문 분석이를 사용할 수 있습니다 위의 코드를 실행 한 후 나는 다음과 같은 출력을 받았다. 샘플 코드에 문제가 있습니다. 내 반환 값은 쉼표로 구분하여 배열을 만듭니다. 콘텐츠에 쉼표가있을 수 있으면 작동하지 않습니다.

방금 ​​같은 것을 사용할 수 있습니다, 당신을 위해 문제가되지 않습니다 :
var temp = '<a href="http://www.drsketchysdublin.com/event-registration/?ee=11">http://www.drsketchysdublin.com/event-registration/?ee=11</a>' 
var expression = /<a\shref="https?[^>]+>(https?:\/\/www\.([^\.]+)\.com[^<]+)<\/a>/ig; 
var options = {target : 'blank'} 

console.log(temp.replace(expression, function(full_match, $1, $2, offset, original){ return '<a href="'+$1+'" target="'+options.target+'">'+$2+'</a>';})) 

그냥 변수를 조금 변경 (물론 반환에 콘솔 로그 변경) 당신이해야 좋아. 정규식에서 괄호 세트를 제거 했으므로 아무 것도 사용하지 않아서 괄호 세트를 삭제했습니다. 정규식을보다 일반적으로 만드는 것에 대해 궁금한 점이 있으면 알려주세요.

+0

이 광범위한 답변을 주셔서 대단히 감사합니다. 바로 내가 찾고있는 것이 었습니다! – looeee

관련 문제