私はIonicのソースコードを読んでいます。私は、この正規表現に出くわした、と私は "かなりそれに困惑メートルこれらの正規表現の違いは何ですか
([\s\S]+?)
[OK]を、それはホワイトスペース、または非空白???
なぜのdidn」のいずれかであるすべての文字にグループ分けていますtは、彼らはただ
(.+?)
を行い、私は何かが足りない?
私はIonicのソースコードを読んでいます。私は、この正規表現に出くわした、と私は "かなりそれに困惑メートルこれらの正規表現の違いは何ですか
([\s\S]+?)
[OK]を、それはホワイトスペース、または非空白???
なぜのdidn」のいずれかであるすべての文字にグループ分けていますtは、彼らはただ
(.+?)
を行い、私は何かが足りない?
.
は、任意のシンボルが、改行にマッチしています。それは改行にマッチさせるためには、ほとんどの言語で修飾(DOTALLがあります、 単線)。しかし、JSでは、そのような修飾子はありません。
したがって、回避策は\s
は、すべての空白にマッチしますし、\S
は、すべての非空白文字にマッチしますので、改行を含め、すべての文字に一致します[\s\S]
文字クラスを使用することです。同様に、[\d\D]
または[\w\W]
を使用できます。
また、JS内で同じものと一致するパターンがありますが、JavaScript固有であるため、このパターンを含む正規表現は正規表現のフレーバ間で移植できません。
+?
lazy quanitifierは、前のサブパターンに適合する1つ以上のシンボルに一致しますが、できるだけ少ないシンボルに一致します。したがって、このように使用された場合は、パターンの最後に1つのシンボルだけが一致します。
完全性のために:* dotall/singleline *修飾子は通常' s'です。他の味。 –
Rubyの '/ m'です。 –
** Argh!** - 'm'は他の味(JSを含む)でまったく違うものを意味します...なぜ彼らは' s'に固執しませんでしたか? : - \また、 'PCRE2_MULTILINE'と同じではない' Regexp :: MULTILINE'という名前を付けます。ニースはここにいる。少なくとも驚きの原則はあなたが言う? ;-) –
.
はすべてと一致しますが、改行文字はです。これは実際にはjavascriptのよく知られた/文書化された問題です。 \s
(空白と一致)とその否定\S
(空白以外の一致)は、改行を含むdotall
の一致を提供します。従って、[\s\S]
は、一般に、より頻繁に使用されます。.
多くのRegexpの実現では "新しい行と一致しません。だから彼らは "[\ s \ S]"を小さなハックとして使用します)
使用されるRegExは、より多くの文字(本質的にすべて)を含みます。
\s
は、任意の単語または数字の文字または空白に一致します。カシミールは指摘したよう
\S
は、数字、単語文字、または空白
以外のものと一致した:
.
マッチ改行以外の任意の文字(\n
)キャリッジリターン/r
除く
.
マッチ任意の文字をと新しい行/n
最短方法[/s/S]
ドット(空白と空白以外)は[^]
(何もありません)
ドットは改行文字 '\ n 'と一致しません –