ホームページ  >  記事  >  ウェブフロントエンド  >  JS正規表現の貪欲モードと非貪欲モードの分析を深く理解する

JS正規表現の貪欲モードと非貪欲モードの分析を深く理解する

不言
不言オリジナル
2018-07-11 09:45:372213ブラウズ

この記事では、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,也就是说,在正常模式下,正则表达式会尽可能多的匹配。

正常情况下,正则表达式采用贪婪模式,即,尽可能多的匹配。

非贪婪模式

但是,有时我们需要正则表达式尽可能少的匹配,也就是说,一旦成功匹配不再继续尝试,这就是非贪婪模式。那么,如何进入非贪婪模式呢?

做法很简单,在量词后加上?即可。

rrreee

可以发现,在非贪婪模式下,该正则只匹配了123 この正規表現は 3 ~ 6 個の数値に一致しますが、この正規表現を使用して文字列 12345678 に一致する場合は、3 個の数値、または 6 個の数値に一致する必要があります。そのなかで何も?

まずは試してみてください:

rrreee

この正規表現は、123456 の 6 つの数字を X に置き換えていることがわかります。つまり、通常モードでは、正規表現は可能な限り一致します。

通常、正規表現は貪欲モード、つまり可能な限り多くの一致を採用します。 非貪欲モード

ただし、場合によっては、正規表現の一致をできるだけ少なくする必要があります。つまり、一致が成功すると、それ以上の試行は行われなくなります。では、どうすれば非貪欲モードに入ることができるでしょうか?

方法は非常に簡単で、量指定子の後に ? を追加するだけです。 rrreee
非貪欲モードでは、この通常のパターンは最小一致である 123 のみに一致することがわかります。

🎜上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。 🎜🎜関連する推奨事項: 🎜🎜🎜JS 正規表現の量指定子の分析についての深い理解🎜🎜🎜🎜🎜 JS 正規表現の定義済みクラスと境界の分析についての深い理解🎜🎜🎜

以上がJS正規表現の貪欲モードと非貪欲モードの分析を深く理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。