gpt4 book ai didi

Javascript:使用正则表达式来分割和存储?

转载 作者:行者123 更新时间:2023-11-28 18:32:16 24 4
gpt4 key购买 nike

所以我正在做练习考试,为我的 Javascript/HTML 做准备,其中一个问题是: Practice exam question

我想到的是:

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. 月份字段应该不区分大小写,其余的都是数字和空格,因此我们可以安全地使用不区分大小写的标志 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

但是,这并不能为您提供所需的数据。为此,您需要使用捕获组。对于您需要的每个字段,在与其匹配的字符周围放置一个捕获组。 (或者,对于月份,只需删除 ?: 将非捕获组转换为捕获组。)/(一月|二月|三月) +(\d{2}) +(\d{4}) +(\d{2}):(\d{2}):(\d{2} )/我

这为您提供了六个捕获组,每个捕获组对应您需要的每个字段。从那里开始,只需填充新对象的字段即可。

完整代码如下:

// 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 代码(以及其他一些语言)来说是很好的。这就是我用来测试我提供的代码的方法。

关于Javascript:使用正则表达式来分割和存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37752371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com