>  기사  >  웹 프론트엔드  >  JS 정규식의 욕심 ​​모드와 비 욕심 모드 분석을 깊이 이해합니다.

JS 정규식의 욕심 ​​모드와 비 욕심 모드 분석을 깊이 이해합니다.

不言
不言원래의
2018-07-11 09:45:372212검색

이 글은 JS 정규식에 대한 심층적인 이해를 위해 Greedy 모드와 Non-greedy 모드에 대한 분석을 주로 소개합니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.