2014-04-18 3 views
1

그래서 regexp를 연결하는 방법이 있는지 궁금합니다. 내 코드를 조금만 최적화하려고합니다. 표현을 찾고 결과에서 다른 표현을 찾고 싶습니다.jQuery Regexp를 연결할 수 있습니까?

실무 코드 :

match = $('body').html().match(/(\[~\{ .*? \}~\])(\w+)/g); 
console.log(match[0]); 

표현 하나의 오류

match = $('body').html().match(/(\[~\{ .*? \}~\])|(\w+)/g); 
console.log(match[0]); 

표현 하나를 찾을 다음을 찾을 표현이 외부 생산 : 나는 무엇을 시도했다

match = $('body').html().match(/(\[~\{ .*? \}~\])/g); 
console.log(match[0]); 

findText = match[0].match(/\w+/); 
console.log(findText); 

.

내 HTML은 :

[~{ header }~] 

<p>This is the home page</p> 

[~{ footer }~] 
+0

부분. '.match()'는 jquery 함수가 아닌 javascript 문자열 함수이므로, ti는 (오류 제어와 함께) 연결을 어렵게하는 결과 배열 (nothign이 일치하면 null)을 반환합니다. 여기 실제로 습득하려고하는 건 뭐니? – Adam

+0

본문에서 [~ {anything} ~]을 찾은 다음 찾은 것으로부터 추출합니다. – jemiloii

+0

작업 코드 섹션은 내가하고 싶은 작업을 정확히 수행합니다. – jemiloii

답변

2

은 그냥 [~{ ... }~] 구조 내부의 단어를 캡처 그룹을 사용했다.

\[~\{ (\w+) \}~\] 

유일한 차이점은 I (\w+) 대신 .*? 일치한다. 필자는 필요하지 않았기 때문에 전체 식 주위에있는 캡처 그룹 ((...))도 제거했습니다.


Regex101

는 이제 자바 스크립트에서 여러 캡처 그룹에 액세스 할 수 조금 어려운,하지만 난 this answer에서 몇 가지 예제 코드를 사용 (감사 마티아스 Bynens) :

function getMatches(string, regex) { 
    var matches = []; 
    var match; 
    while (match = regex.exec(string)) { 
     matches.push(match); 
    } 
    return matches; 
} 

var myString = $('body').html(); 
var myRegEx = /\[~\{ (\w+) \}~\]/g; 

var matches = getMatches(myString, myRegEx); 
console.log(matches[0]); 

출력 :

Array[2] 
    0: "[~{ header }~]" // The whole match 
    1: "header"   // The captured group 


그래서 최종 코드는 다음과 같이 (이입니다 의사 코드)를 볼 수 있었다 :

당신은 실제로 당신이 함께하지 체인이 찾고있는 것을 선택하는 하나 개의 정규 표현식을 작성하려는
matches; // this is set from previous code block 

for(var i = 0; i < matches.length; i++) { 
    var needsToBeReplaced = matches[i][0]; 
    var template = getTemplate(matches[i][1]); 
} 
+0

답장을 보내 주셔서 감사합니다. 그러나 이것은 단지 [~ {header} ~]를 반환하는 것일뿐입니다. – jemiloii

+0

@ JemiloII 최종 업데이트를 참조하십시오. 일치하는 배열이됩니다. 각 일치는 0- 인덱스에서 전체 일치 ('[~ {header} ~]')와 1- 인덱스에서 캡쳐 된 그룹 ('header')을 포함하는 배열입니다. – Sam

+1

와우,이게 정말 멋지 네요! 나는 다단계 배열 형식을 좋아합니다. 이 형식을 사용하면 나중에 업데이트 된 내용으로 쉽게 코드를 대체 할 수 있습니다. jsfiddle의 경우 https://getfirebug.com/firebug-lite-debug.js를 외부 리소스로 추가하면 디버거가 생성됩니다. http : // jsfiddle.net/cqTAv/1/ – jemiloii

관련 문제