[英]Javascript: using regex to split and store?
因此,我正在為我的Javascript / HTML做准備的實踐考試,問題之一是:
我想到的是:
function check(date_str){
var split1 = date_str.split(" ");
var split2 = date_str.split(":");
var split3 = split1[3].slice(0,2);
var obj = [
{"month": split1[0]},
{"date": split1[1]},
{"year": split1[2]},
{"hour": split3},
{"minute": split2[1]},
{"second": split2[2]}
];
return obj;
這顯然不使用正則表達式,因為這個問題也在問我們。 我嘗試這樣做:
(\\ w +)(\\ d +)(\\ d +)(\\ d +):(\\ d +):(\\ d +)
我不知道這是對還是錯。
我還有另一個問題,我不確定如何將從正則表達式表達式中拆分的字符串存儲到JSON對象中? 它們拆分后是否存儲在數組中? 他們有索引嗎?
請給我任何指示,並指出正確的方向,謝謝!
因此,這是充分利用捕獲組的絕好機會。
因為您的輸入字符串是嚴格格式化的,所以您可以使用它來制作正則表達式。 讓我們開始吧。 輸入字符串,然后將其分解為應該存在的字符串:
/CCC dd yyyy hh:mm:ss/
d
, y
, h
, m
和s
都恰好是一位數字: /CCC \\d\\d \\d\\d\\d\\d \\d\\d:\\d\\d:\\d\\d/
/CCC \\d{2} \\d{4} \\d{2}:\\d{2}:\\d{2}/
jan
, feb
或mar
,因此我們可以用三個選項將其替換為一個非捕獲組: /(?:jan|feb|mar) \\d{2} \\d{4} \\d{2}:\\d{2}:\\d{2}/
i
,而不是直接處理選項: /(?:jan|feb|mar) \\d{2} \\d{4} \\d{2}:\\d{2}:\\d{2}/i
/(?:jan|feb|mar) +\\d{2} +\\d{4} +\\d{2}:\\d{2}:\\d{2}/i
現在,您有了一個正則表達式,它正好符合您的輸入要求: /(?:jan|feb|mar) +\\d{2} +\\d{4} +\\d{2}:\\d{2}:\\d{2}/i
但是,這並不能為您提供所需的數據。 為此,您需要使用捕獲組。 對於您需要的每個字段,在與之匹配的字符周圍放置一個捕獲組。 (或者,對於本月,只需刪除?:
即可將非捕獲組轉換為捕獲組。) /(jan|feb|mar) +(\\d{2}) +(\\d{4}) +(\\d{2}):(\\d{2}):(\\d{2})/i
這樣就為您提供了六個捕獲組,每個捕獲組一個。 從那里開始,只需填充一個新對象的字段即可。
這是完整的代碼:
// Here's the function.
function check(date_string){
// Make the pattern and use it to match the date_string.
var date_pattern = /(jan|feb|mar) +(\d{2}) +(\d{4}) +(\d{2}):(\d{2}):(\d{2})/i;
var match = date_string.match(date_pattern);
// If it wasn't a match, return null.
if (!match) return null;
// Otherwise, return a new object from the capture groups.
return {
month: match[1],
date: match[2],
year: match[3],
hour: match[4],
minute: match[5],
second: match[6]
};
}
// This bit is test code.
var input_string = "Jan 10 2016 10:11:12";
var result = check(input_string);
if (result) console.log(JSON.stringify(result,null,2));
else console.log("Result was null");
希望這會有所幫助。 一旦全面了解正則表達式,它便是一個了不起的強大工具。
**編輯:正如另一位評論者所述, Regex101是一個了不起的工具,可以幫助您測試和調試正則表達式。 我在職業生涯中每天都會使用它。 還有一個稱為repl.it的有用工具,它非常適合編寫和執行任意Javascript代碼(以及某些其他語言)。 這就是我用來測試提供的代碼的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.