이 글은 JS 정규식에 대한 심층적인 이해를 위해 Greedy 모드와 Non-greedy 모드에 대한 분석을 주로 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.
정수자를 사용하기 전에도 말했지만, 수량자를 사용하면 가 일치해야 하는 문제
가 발생합니다. 到底该匹配哪个
的问题。
如下正则表达式:
\d{3,6}
这个正则表达式是匹配3到6个数字,但是当这个正则表达式被用来匹配12345678
这个字符串,到底该匹配三个数字还是6个数字,亦或者是都不是?
可以先试试:
let text = '12345678' let reg = /\d{3,6}/g text.replace(reg, 'X') // X78
可以看到该正则将123456
六个数字替换为了X
,也就是说,在正常模式下,正则表达式会尽可能多的匹配。
正常情况下,正则表达式采用贪婪模式,即,尽可能多的匹配。
但是,有时我们需要正则表达式尽可能少的匹配,也就是说,一旦成功匹配不再继续尝试,这就是非贪婪模式。那么,如何进入非贪婪模式呢?
做法很简单,在量词后加上?
即可。
let text = '12345678' let reg = /\d{3,6}?/g text.replace(reg, 'X') // X45678
可以发现,在非贪婪模式下,该正则只匹配了123
rrreee
이 정규 표현식은 3~6개의 숫자와 일치하지만, 이 정규 표현식을 사용하여 문자열12345678
과 일치하는 경우에는 3개의 숫자와 일치해야 합니다. 그 중 하나도 없나요? 먼저 시도해 볼 수 있습니다: rrreee이 정규식은 123456
의 6개 숫자를 X
로 대체합니다. 즉, 일반 모드에서는 정규식은 가능한 한 많이 일치합니다.
일반적으로 정규식은 탐욕 모드를 채택합니다. 즉, 최대한 많이 일치합니다.
Non-greedy 모드그러나 때로는 가능한 한 적은 수의 정규식 일치가 필요할 수 있습니다. 즉, 일단 성공적인 일치가 이루어지면 더 이상 시도가 이루어지지 않습니다. 이것이 non-greedy 모드입니다. 그럼 비탐욕 모드로 들어가는 방법은 무엇일까요?
?
만 추가하면 됩니다. 🎜rrreee🎜 non-greedy 모드에서는 이 정규 패턴이 최소 일치인 123
에만 일치하는 것을 확인할 수 있습니다. 🎜🎜위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요! 🎜🎜관련 추천: 🎜🎜🎜JS 정규식의 수량자 분석에 대한 심층적인 이해🎜🎜🎜🎜🎜JS 정규식의 사전 정의된 클래스 및 경계 분석에 대한 심층적인 이해🎜🎜🎜위 내용은 JS 정규식의 욕심 모드와 비 욕심 모드 분석을 깊이 이해합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!