2016-01-04 3 views
0

может кто-то сказать мне, почему мой код продолжает возвращать null, он использовал, чтобы вернуть совпадение, теперь его нет, и я не знаю, что случилось. Я хочу, чтобы найти совпадение в строке для 1 часномер возвращаемого слова и слово regex javascript

var error = "null"; 

var str = "1 hour " 


var strCheck = str.match(/[1]\s[hour]\s/g); 

if(String(strCheck) != error) { 
alert("works!"); 
} 
+1

Использовать регулярное выражение '/ 1 час/g'. Класс символов '[]' соответствует только одному символу внутри него. Не нужно использовать 'String' в строке, потому что это уже строка. – Tushar

+0

вам просто нужно использовать '/ yoursting/g' –

+0

Является ли строка' 1 час 'всегда или будет _10 часов_? Если строка исправлена, используйте оператор сравнения ('==='). – Tushar

ответ

1

Проверьте это ..

var error = "null"; 
 

 
var str = "1 hour " 
 

 

 
var strCheck = str.match(/1 hour /g); 
 

 
if(strCheck != error) { 
 
alert("works!"); 
 
}

Объяснение:

[] используется для сопоставления один символ, поэтому [hour] неверен, и если у вас есть c висящий в количестве часов, вы можете сделать это следующим образом:

var error = "null"; 
 

 
var str = "1 hour " 
 

 

 
var strCheck = str.match(/[0-9][0-9] hour /g); 
 

 
if(strCheck != error) { 
 
alert("works!"); 
 
}

или просто использовать \d найти цифру и \d+ найти одну или несколько цифр.
Подробнее см. this его простой и понятный.

+1

Также добавьте некоторое объяснение, просто сброс кода не поможет. – Tushar

+0

Не только объяснение, но и лучший способ проверить матч будет полезным для OP. – DontVoteMeDown

+0

Я не очень хорош в regex @tushar, благодаря чему мне больше узнать об этом и узнать больше об этом. –

1

RegEx [1]\s[hour]\s не будет работать. Класс символов без квантификаторов [] используется для сопоставления только одного символа из символов внутри него. Таким образом, [hour] будет соответствовать одному из символов от h, o, u и r. Однако вы хотите совместить hour как полную строку.

Чтобы сделать регулярное выражение более динамичным и соответствовать даже 10 hours, может использоваться следующее регулярное выражение.

/\d+\s*hours?\s*/ 

Код:

var error = "null"; 
 
var str = "1 hour " 
 
var strCheck = str.match(/\d+\s*hours?\s*/g); 
 
if (strCheck != null) { 
 
    alert("works!"); 
 
} 
 

 
console.log(strCheck);

Если вы просто хотите, чтобы проверить, если строка содержит шаблон, используйте RegExp#test вместо String#match.

/\d+\s*hours?\s*/.test(str) 
+0

Это сработало? – Vegeta

+1

'\ d' ==>' \ d + 'и' hour' ==> 'hours?', Пример _12 hours_. – Tushar

+0

@Tushar благодарит много друга. – Vegeta

0

Я не знаю, какого рода проверки вам нужно с этим регулярное выражение, но это может быть полезно:

\d+\s(hour(s)?) 

Пояснение:

  • \d+ одна или несколько цифр
  • \s Пустая площадь
  • (hour(s)?) a строка час с опционным s в конце для множественного числа.

Метод match() возвращает массив с результатами или null, если совпадения не найдено. Поэтому я предлагаю вам просто проверить результат как логическое, а не сравнивать с строкой "null". Тогда вы код может выглядеть так:

var strCheck = str.match(/\d+\s(hour(s)?)/, g); 

if (strCheck) { 
    alert("works!"); 
} 

Некоторые cases here.

+0

Вам не нужны группы захвата для 'hour' и' s'. И запятая в 'match()' – Tushar

Смежные вопросы