有人能告訴我爲什麼我的代碼一直返回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!");
}
有人能告訴我爲什麼我的代碼一直返回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!");
}
檢查這個..
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其簡單明瞭。
也添加一些解釋,只是代碼轉儲沒有幫助。 – Tushar
不僅解釋,但檢查匹配的更好方法將有助於OP。 – DontVoteMeDown
我不擅長正則表達式@tushar感謝強迫我閱讀更多關於此的知識並獲得更多關於此的知識。 –
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)
我不知道你需要與正則表達式是什麼樣的驗證,但是這可能是有用的:
\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。
您不需要爲「小時」和「s」捕獲組。和'match()'中的逗號 – Tushar
使用正則表達式'/ 1小時/克'。字符類'[]'只匹配其中的一個字符。不需要在字符串上使用'String',因爲它已經是字符串了。 – Tushar
你只需要使用'/ yoursting/g' –
字符串'1小時'總是或會有_10 hours_?如果字符串是固定的,則使用比較運算符('===')。 – Tushar