3
var rclass = /[\n\t\r]/g;

在上面,没有"",或''周围,所以不能是字符串,这不是自己的数据类型吗?那为什么不合格呢?

另外,为什么我们不把"",放在''它周围而只是将它表示为一个字符串?

4

3 回答 3

4

在 JavaScript 中,您可以通过两种方式创建大多数东西

通过调用其构造函数:

var myConstructedString = new String( "foo" );
var myConstructedRegExp = new RegExp("[\n\t\r]", "g");

或使用文字

var myLiteralString = "bar";
var myLiteralRegExp = /[\n\t\r]/g;

正则表达式也不例外。Date是一种没有文字表示法的类型(Date 实际上不是类型,而是 Object 类型的子类型)。

因此,要回答您的一个问题,“这不是它自己的数据类型吗?”。不,不是,RegExp 是 Object 类型,就像 Date 和 Math 一样。JavaScript中只有六种类型

MDN上的这篇文章很好读。

于 2013-09-04T08:06:54.710 回答
2

当你有:

var myRegex = /myRegex/;

typeof myRegex返回“对象”而不是“字符串”。这意味着它/myRegex/实际上不是字符串,而是具有自己方法的真实对象(例如,我可以在其上看到“exec”函数或“ignoreCase”...)。

我还发现了 Object RegExp: new RegExp("myRegex")returns .... /myregex/:-)

事实证明,使用/myRegex/语法创建正则表达式的方式是等效于new RegExp("myRegex").

于 2013-09-04T08:12:49.473 回答
0

因为这就是你在 JS 中定义正则表达式的方式。正则表达式由/字符分隔。请记住,正则表达式不是字符串,它本身就是某种东西。这是一篇关于这个问题的好文章。

于 2013-09-04T08:26:32.177 回答