var rclass = /[\n\t\r]/g;
上記では""
、 または''
その周りに がないため、文字列にはなりませんが、これは独自のデータ型ではありませんか? では、なぜ資格がないのでしょうか。
また、なぜそれを , で囲わず""
、''
単に文字列として表現しないのでしょうか?
var rclass = /[\n\t\r]/g;
上記では""
、 または''
その周りに がないため、文字列にはなりませんが、これは独自のデータ型ではありませんか? では、なぜ資格がないのでしょうか。
また、なぜそれを , で囲わず""
、''
単に文字列として表現しないのでしょうか?
JavaScript では、ほとんどのものを 2 つの方法で作成できます。
コンストラクター関数を呼び出すことによって:
var myConstructedString = new String( "foo" );
var myConstructedRegExp = new RegExp("[\n\t\r]", "g");
またはリテラルを使用する:
var myLiteralString = "bar";
var myLiteralRegExp = /[\n\t\r]/g;
正規表現も例外ではありません。Dateは、リテラル表記を持たない 1 つの型です (Date は実際には型ではなく、Object 型のサブ型です)。
あなたの質問の 1 つに答えるために、「これは独自のデータ型ではありませんか?」。いいえ、そうではありません。RegExp は Date や Math と同じように Object 型です。JavaScript には 6 つの型しかありません
MDNのこの記事をよく読んでください。
あなたが持っているとき:
var myRegex = /myRegex/;
typeof myRegex
「文字列」ではなく「オブジェクト」を返します。これは、実際に/myRegex/
は文字列ではなく、独自のメソッドを持つ実際のオブジェクトであることを意味します (たとえば、「exec」関数や「ignoreCase」などを見ることができます...)。
Object RegExp: new RegExp("myRegex")
returns ....も見つかりました/myregex/
:-)
構文で正規表現を作成する方法は、 と/myRegex/
同等の構文規則であることがわかりますnew RegExp("myRegex")
。