この記事では、JS 正規表現を深く理解するための貪欲モードと非貪欲モードの分析を主に紹介します。必要な友人に参考にしてください。
前に述べたように、通常の量指定子が提供されていますが、量指定子はどの と一致させる必要がある
かという問題を引き起こします。 次の正規表現: \d{3,6}
到底该匹配哪个
的问题。如下正则表达式:
let text = '12345678' let reg = /\d{3,6}/g text.replace(reg, 'X') // X78
这个正则表达式是匹配3到6个数字,但是当这个正则表达式被用来匹配12345678
这个字符串,到底该匹配三个数字还是6个数字,亦或者是都不是?
可以先试试:
let text = '12345678' let reg = /\d{3,6}?/g text.replace(reg, 'X') // X45678
可以看到该正则将123456
六个数字替换为了X
,也就是说,在正常模式下,正则表达式会尽可能多的匹配。
正常情况下,正则表达式采用贪婪模式,即,尽可能多的匹配。
但是,有时我们需要正则表达式尽可能少的匹配,也就是说,一旦成功匹配不再继续尝试,这就是非贪婪模式。那么,如何进入非贪婪模式呢?
做法很简单,在量词后加上?
即可。
可以发现,在非贪婪模式下,该正则只匹配了123
この正規表現は 3 ~ 6 個の数値に一致しますが、この正規表現を使用して文字列 12345678
に一致する場合は、3 個の数値、または 6 個の数値に一致する必要があります。そのなかで何も?
まずは試してみてください:
rrreee この正規表現は、123456
の 6 つの数字を X
に置き換えていることがわかります。つまり、通常モードでは、正規表現は可能な限り一致します。
通常、正規表現は貪欲モード、つまり可能な限り多くの一致を採用します。 非貪欲モード
方法は非常に簡単で、量指定子の後に ?
を追加するだけです。 rrreee
非貪欲モードでは、この通常のパターンは最小一致である 123
のみに一致することがわかります。
以上がJS正規表現の貪欲モードと非貪欲モードの分析を深く理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。