2015-01-27 3 views
1

Я хочу протестировать две строки, используя одно регулярное выражение (ИЛИ используя одиночный patter).test() function in regex

var reg_expr = (/(\d{1,2}?h$)|(\d{1,2}h(?=\s+))/gi) 
str1 = "5h" 
str2 = "7h" 

if (reg_expr.test(str1) == true && reg_expr.test(str2) == true) 
{ console.log("Matched.........") } 

но дает reg_expr.test(str1) --> true и reg_expr.test(str2) --> false

+0

Вы пробовали удаление глобальной флаг 'g'? –

+0

Почему существует '' 'в регулярном выражении? – maja

+0

$ добавляется для получения h в конце строки, как на собрании в 7 часов. –

ответ

2

Удалить глобальный переключатель иначе regex object maintains its state of lastIndex поэтому последующие последующие матчи будут начинаться с последнего использованного индекса на входе, а не 0.

var reg_expr = /(\d{1,2}?h$)|(\d{1,2}h(?=\s+))/i; 

console.log(reg_expr.test(str1), reg_expr.test(str2));  
true true 
+0

да, он отлично работает. –

+0

, но в чем причина, флаг 'g' удален, чем работает отлично ???? –

+0

Без флага 'g' он не запоминает' lastIndex'. Проверьте ссылку, которую я предоставил, которая говорит: ** Это свойство устанавливается, только если регулярное выражение использовало флаг '' g ''для указания глобального поиска ** – anubhava

0

Вы не можете повторно использовать этот объект reg_expr.

var reg_expr = (/(\d{1,2}?h$)|(\d{1,2}h(?=\s+))/gi); 
 
str1 = "5h"; 
 

 
if (reg_expr.test(str1)) 
 
    window.alert("Matched >"+str1+"<"); 
 
else 
 
    window.alert("Not Matched >"+str1+"<"); 
 

 
reg_expr = (/(\d{1,2}?h$)|(\d{1,2}h(?=\s+))/gi); 
 
str2 = "7h"; 
 

 
if (reg_expr.test(str2)) 
 
    window.alert("Matched >"+str2+"<"); 
 
else 
 
    window.alert("Not Matched >"+str2+"<");


редактировать: @anubhava прав - удаления "г" флаг также работает:

var reg_expr = (/(\d{1,2}?h$)|(\d{1,2}h(?=\s+))/i); 
 
str1 = "5h"; 
 

 
if (reg_expr.test(str1)) 
 
    window.alert("Matched >"+str1+"<"); 
 
else 
 
    window.alert("Not Matched >"+str1+"<"); 
 

 
str2 = "7h"; 
 

 
if (reg_expr.test(str2)) 
 
    window.alert("Matched >"+str2+"<"); 
 
else 
 
    window.alert("Not Matched >"+str2+"<");