2016-01-04 20 views
0

有人能告訴我爲什麼我的代碼一直返回null,它用來返回一個匹配現在它不是,我不知道什麼是錯的。我希望它找到字符串中的匹配1小時返回數字和字正則表達式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小時/克'。字符類'[]'只匹配其中的一個字符。不需要在字符串上使用'String',因爲它已經是字符串了。 – Tushar

+0

你只需要使用'/ yoursting/g' –

+0

字符串'1小時'總是或會有_10 hours_?如果字符串是固定的,則使用比較運算符('===')。 – 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

我不擅長正則表達式@tushar感謝強迫我閱讀更多關於此的知識並獲得更多關於此的知識。 –

1

RegEx [1]\s[hour]\s將不起作用。沒有量詞[]的字符類只用於匹配其中字符的單個字符。因此,[hour]將匹配h,o,ur中的一個字符。但是,您希望匹配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)?)字符串小時可選s最後爲複數。

match()方法返回一個包含結果的數組或null如果未找到匹配項。所以我建議你簡單地檢查結果爲一個布爾值,而不是與"null"字符串進行比較。那麼你的代碼可能是這樣的:

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

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

一些cases here

+0

您不需要爲「小時」和「s」捕獲組。和'match()'中的逗號 – Tushar

相關問題