6

我有以下 Javascript 正则表达式:

 var regex = '/^' + name + '/'; 
 var s ='';
 s = this.innerHTML.toString().toLowerCase().match(regex);
    if (s != null){
         //do stuff
    }

这个正则表达式不能按预期工作,s永远不会设置(s = null总是)有什么想法吗?

4

6 回答 6

7
var regex = new RegExp("^" + name);

也许这可以解决问题。

于 2013-09-06T12:01:42.917 回答
3

由于您的模式是通过字符串连接动态生成的,因此您需要创建一个 RegExp 对象:

var regex = new RegExp('^' + name + ');
于 2013-09-06T12:02:47.860 回答
1

当您想要连接查询字符串时,您需要使用 RegExp 对象。所以在你的情况下/是查询的一部分。

 var regex = new RegExp('^' + name);
 var s = '';
 s = this.innerHTML.toString().toLowerCase().match(regex);
 if (s != null) {
   //do stuff
 }
于 2013-09-06T12:03:27.707 回答
1

我创建了一个jsFiddle以允许您测试各种正则表达式方面。

问题是格式var regex不正确。删除/es:

// Test code
var name = "foobar";
//var test = "foobar at the start of a sentence";
var test = "a sentence where foobar isn't at the start";

//var regex = '/^' + name + '/'; // Wrong format
var regex = '^' + name; // correct format
var s = '';
//s = this.innerHTML.toString().toLowerCase().match(regex);
s = test.toString().toLowerCase().match(regex);
if (s != null) {
    //do stuff
    alert("works");
}
于 2013-09-06T12:08:18.603 回答
1

创建正则表达式有两种方法:

1) 使用文字形式

var re = /\w+/;

2)使用对象创建表单

var re = new RegExp("\\w+");

通常,您需要文字形式。在您的情况下,您是从字符串创建它,您必须使用对象创建表单。

var re = new RegExp("^" + name);
于 2013-09-06T12:43:12.077 回答
0

只需删除斜线即可。

pattern = function(name){"^"+name;}

(name + "whatever").match(pattern(name)); // not null
("whatEver..NotName").match(pattern(name)); // null
于 2013-09-06T12:00:52.310 回答