javascript - 使用正则表达式匹配加入的 AmPm 小时数

标签 javascript regex string typescript

我有下一种格式的输入字符串:12:00am|1:20PM|9:30Pm

我需要输出时间数组,例如:[12:00am, 1:20PM, 9:30Pm]

但在我将其与正则表达式匹配之前。

我有一些正则表达式来匹配 AmPm 小时,我尝试添加 | 来匹配完整的字符串 \b((1[0-2]|0?[1-9]):([0-5][0-9])([AaPp][Mm]))([|])? 。此正则表达式匹配字符串 12:00am|1:20PM|9:30Pm,但也匹配字符串 12:00am|1:20PM}9:30Pm,这是不正确的。

我的正则表达式哪里出错了,我怎样才能返回预期的数组。

谢谢

最佳答案

\b((1[0-2]|0?[1-9]):([0-5][0-9])([AaPp][Mm]))([ |])? 不需要 | 因为 [|]? 匹配此字符的 1 次或 0 次出现。此正则表达式匹配 12:00am|1:20PM}9:30Pm,因为它找到 12:00am 并将其称为一天(即返回有效匹配)。

您需要使用 | 拆分字符串并根据 /^(1[0-2]|0?[1-9]):([0-5 ][0-9])([AaPp][Mm])$/ 模式。

var s = "12:00am|1:20PM|9:30Pm";
var re = /^(1[0-2]|0?[1-9]):[0-5][0-9]([AaPp][Mm])$/;
var items = s.split("|");
if (items.filter(function(x) { return re.test(x); }).length === items.length) {
   console.log("VALID => ", items);
} else {
	console.log("INVALID!");
}

请注意,您可以使用正则表达式来预先验证字符串,但这更麻烦:

var s = "12:00am|1:20PM|9:30Pm";
var re_block = "(1[0-2]|0?[1-9]):([0-5][0-9])([AaPp][Mm])";
var re = new RegExp("^" + re_block + "(?:\\|" + re_block + ")*$");
var isValid = re.test(s);
console.log(isValid ? s.split("|") : "Invalid!");

正则表达式看起来像 /^(1[0-2]|0?[1-9]):([0-5][0-9])([AaPp][Mm]) (?:\|(1[0-2]|0?[1-9]):([0-5][0-9])([AaPp][Mm]))*$/它将验证以时间子字符串开头的字符串,然后出现 0 次或多次时间子字符串直到字符串结尾。查看pattern demo .

关于javascript - 使用正则表达式匹配加入的 AmPm 小时数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44176727/

相关文章:

括号内的 JavaScript 正则表达式

javascript - 搜索并替换一组数字

javascript - 将 HTML 字符串解析为 DOM 并将其转换回字符串

c++11 - 使用 {} 构造函数直接从 char* 初始化 std::string

php - javascript显示中的时区偏移

r - 如何根据正则表达式在 dplyr 中分隔列

javascript - 如何添加表格数据并在单页中显示输出

javascript - 如何通过索引从数组中删除重复字符串?

javascript - 将ejs转换为jade?

Javascript使用变量作为多数组索引