RegExp(“str”,“i”)和“/”+“str”+“/ i”之间有什么区别

时间:2015-05-24 02:41:02

标签: javascript regex

我尝试通过创建如下字符串来执行不区分大小写的正则表达式搜索:

var regEx = '/'+myStr+'/i';

但是当我在搜索中使用它时,它总是返回-1

如果我使用:

var regEx = RegExp(myStr,'i');

它就像一个冠军。

我想了解原因?

1 个答案:

答案 0 :(得分:4)

您的第一个示例将创建一个字符串,而不是正则表达式对象。

var myStr = 'test';
var regEx = '/'+myStr+'/i';
console.log(typeof regEx);//string

使用RegExp将创建正则表达式对象。

var myStr = 'test';
var regEx = RegExp(myStr,'i');
console.log(typeof regEx);//object

因此,当您尝试使用search方法时,您正在搜索双方斜杠上的字符串,从而获得-1

var s = 'just a test string';
console.log(s.search('/test/'));//-1
console.log(s.search(/test/));//7

当然,字符串search方法可以使用字符串,在这种情况下,它将搜索特定的子字符串,在您的情况下不存在,因此它返回-1索引。在您的示例中,斜杠被添加到字符串中,而不是生成预期的正则表达式。

在JavaScript中,有两种创建正则表达式对象的方法(不使用代码评估),正则表达式文字和RegExp构造函数创建的方法。

必须在编译时定义正则表达式文字,并且不能从字符串连接构造。

/test/i

要在运行时动态创建正则表达式,必须使用RegExp构造函数。

RegExp('test', 'i');