2013-09-06 2 views
4

Я не следующий Javascript регулярное выражение:Javascript регулярное выражение матч не работает

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

Это регулярное выражение не работает, как ожидалось, s не получает набор (s = null всегда) Любые идеи?

+0

что это такое? – Sachin

ответ

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

Может быть, это устраняет проблему.

0

Просто удаляется слэш работает.

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

(name + "whatever").match(pattern(name)); // not null 
("whatEver..NotName").match(pattern(name)); // null 
+0

отредактирован, чтобы звучать скорее как ответ. – Julius

2

Поскольку ваша модель динамически генерируется через конкатенацию, необходимо создать объект RegExp:

var regex = new RegExp('^' + name + '); 
+0

... две вещи, которые этот ответ говорит, ложны ... функция соответствия также принимает строку, и шаблон не динамически оценивается, даже с RegExp – Julius

+0

Полезно знать о функции соответствия. По динамике я имел в виду, что для шаблона требуется конкатенация строк, в отличие от жестко заданного значения. Объект regex необходимо будет воссоздавать каждый раз, когда обновляется 'name' – cfs

1

Вы должны использовать объект RegExp, если вы хотите, чтобы сцепить строки запроса. Поэтому в вашем случае / являются частью запроса.

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

Я создал 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"); 
} 
1

Есть два способа создать регулярное выражение:

1) Использование буквальной формы

var re = /\w+/; 

2) Использование формы создания объекта

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

Обычно вам нужна буквальная форма. В вашем случае, если вы создаете его из строки, вы должны использовать форму создания объекта.

var re = new RegExp("^" + name); 
Смежные вопросы