簡體   English   中英

Javascript:使用正則表達式進行拆分和存儲?

[英]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對象中? 它們拆分后是否存儲在數組中? 他們有索引嗎?

請給我任何指示,並指出正確的方向,謝謝!

因此,這是充分利用捕獲組的絕好機會。

因為您的輸入字符串是嚴格格式化的,所以您可以使用它來制作正則表達式。 讓我們開始吧。 輸入字符串,然后將其分解為應該存在的字符串:

  1. 以字符串格式開頭: /CCC dd yyyy hh:mm:ss/
  2. dyhms都恰好是一位數字: /CCC \\d\\d \\d\\d\\d\\d \\d\\d:\\d\\d:\\d\\d/
  3. 使用精確的量詞進行簡化: /CCC \\d{2} \\d{4} \\d{2}:\\d{2}:\\d{2}/
  4. CCC只能是janfebmar ,因此我們可以用三個選項將其替換為一個非捕獲組: /(?:jan|feb|mar) \\d{2} \\d{4} \\d{2}:\\d{2}:\\d{2}/
  5. month字段應該不區分大小寫,其余的是數字和空格,因此我們可以安全地使用不區分大小寫的標志i ,而不是直接處理選項: /(?:jan|feb|mar) \\d{2} \\d{4} \\d{2}:\\d{2}:\\d{2}/i
  6. 最后,指令說元素之間可以有一個以上的空格,因此添加時我們必須在每個空格之后添加適當的量詞: /(?: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM