2012-06-12 5 views
1

나는 몇 가지 기본적인 자바 스크립트 정규식을 배우려고하고있다.자바 정규식

(.*?) 

내가 알고 :이 부분을 제외하고

/(?:^|\s)format_(.*?)(?:\s|$)/g 

: 나는 표현의 대부분을 해독했다고 생각 How do you access the matched groups in a JavaScript regular expression?

: 우선, 나는이 문서와이 SO 질문을 읽어

.* 

은 0 이상의 발생 횟수와 일치해야합니다. 모든 문자 (개행 문자 또는 줄 종결 자 제외).

? 

가 필요한 이유

그러나 나는 알아낼 수 없습니다.

나는 비슷한 놀고 있었는데 :

/(?:^|\s)ab(.*?)ab(?:\s|$)/ 
' ab4545ab ' 

그리고 일이되었습니다 사용하거나

? 

(.*?) 

어떤 생각이있는없이 같은 행동?

감사합니다.

+1

그 맥락에서 물음표는 '게으른'일치를 의미합니다. – jahroy

+0

http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/ –

+0

위의 튜토리얼, 유용한 예 및 모든 내용을 읽으십시오. http://www.regular-expressions.info /tutorial.html 및 특히 http://www.regular-expressions.info/repeat.html#lazy –

답변

5

그것은 .*을 욕심이 없습니다. 즉, 정규 표현식에서 다음 유효한 문자 시퀀스가 ​​처음 발생하면 .*이 중지됩니다.

?이 없으면 .*은 정규 표현식에서 다음 유효한 문자 시퀀스가 ​​마지막으로 나타날 때까지 사용합니다.

var s = "foo bar boo bar foo"; 

var greedy = /.*bar/; 
var no_greed = /.*?bar/; 

greedy.exec(s); // foo bar boo bar 

no_greed.exec(s); // foo bar 

그래서 욕심 하나가 마지막 "바"에 최초의 "바"과거 소비한다.

비 욕심은 첫 번째 "바"로 이동합니다. .+ 또는 .* 경기 후

4

?는 경기 게으른 대신 기본 욕심를 만들 것입니다. 의미와는 달리, 가능한 한 적은 수의 문자와 일치합니다.

예 :

"hello".match(/.+/) //Returns ["hello"] 
"hello".match(/.+?/) //Returns ["h"] 
2

?은 정량의 ungreedy한다. 이를 사용하지 않으면 *은 가능한 한 많은 문자를 먹을 것이며, 이는 특히 .에서 강력합니다. 그러나, 거기에 ? 함께, 그것은 필요한만큼 적게 먹을 것입니다.

"abcccbacba"과 같이이 문자열을 사용하고 /abc(.*)ba/과 일치시킵니다. 캡처 결과는 ccbac입니다. 반면에 /abc(.*?)ba/cc을 캡처합니다.