var rclass = /[\n\t\r]/g;
在上面,没有""
,或''
周围,所以不能是字符串,这不是自己的数据类型吗?那为什么不合格呢?
另外,为什么我们不把""
,放在''
它周围而只是将它表示为一个字符串?
var rclass = /[\n\t\r]/g;
在上面,没有""
,或''
周围,所以不能是字符串,这不是自己的数据类型吗?那为什么不合格呢?
另外,为什么我们不把""
,放在''
它周围而只是将它表示为一个字符串?
在 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上的这篇文章很好读。
当你有:
var myRegex = /myRegex/;
typeof myRegex
返回“对象”而不是“字符串”。这意味着它/myRegex/
实际上不是字符串,而是具有自己方法的真实对象(例如,我可以在其上看到“exec”函数或“ignoreCase”...)。
我还发现了 Object RegExp: new RegExp("myRegex")
returns .... /myregex/
:-)
事实证明,使用/myRegex/
语法创建正则表达式的方式是等效于new RegExp("myRegex")
.
因为这就是你在 JS 中定义正则表达式的方式。正则表达式由/
字符分隔。请记住,正则表达式不是字符串,它本身就是某种东西。这是一篇关于这个问题的好文章。