我在处理时间和经络问题。
我可以使用'2:0 a. m.'、'2:0 am'、'3:0 p. m.'或'3:0 pm',基本上,当第二个发生时,我要做的是首先转换。
我的尝试:
console.info('2:0 a. m.'.replace(/(.*?\s)([ampAMP]*?)/, "$1")); // 2:0 a. m.这个我真的不明白..。
'2:0 a. m.'.replace(/(.*?\s)([ampAMP]).*?([ampAMP])/, "$1"); // 2:0 .这个很好用,但看起来很奇怪,不确定这是不是最好的方法
'2:0 a. m.'.replace(/(.*?\s)([ampAMP]).*?([ampAMP]).*?$/, "$1$2$3");我几乎无法从时间中删除子午线,但是在第一个空格之后我如何替换所有不匹配[aAmMpP]的字符呢?
发布于 2022-12-04 17:04:44
如果要匹配am或pm,则使用[ampAMP]只匹配单个字符。如果您使用它两次,那么您将允许使用mm,它不是有效的格式。
您可以使模式匹配更多的变化,并捕获您想要保留的内容。然后,在替换中,使用捕获组创建所需的格式。
如果指定点是强制性的:
\b(\d{1,2})\s*:\s*(\d{1,2})\s*([ap])\.\s*m\.\b A字界(\d{1,2})捕获组1,匹配1-2位数字\s*:\s*数学:(\d{1,2})捕获组2,匹配1-2位数字\s*匹配可选空格字符([ap])捕获组3,匹配a或b\.\s*m\.匹配.可选空格字符、m和.看一个regex演示。
在替换使用中(正如您已经知道的,您已经匹配了m字符)
$1:$2 $3m
const regex = /\b(\d{1,2})\s*:\s*(\d{1,2})\s*([ap])\.\s*m\./;
[
"2:0 a. m.",
"2:0 p. m.",
"3:0 p. m.",
"3:0p.m.",
"2:0 am"
].forEach(s => console.log(s.replace(regex, "$1:$2 $3m")));
更多的时间,比如特定的模式,允许为秒部分提供一个可选的数字0-5:
\b([0-1]?[0-9]|2[0-3])\s*:\s*([0-5]?[0-9])\s*([ap])\.\s*m\.发布于 2022-12-04 16:56:30
就目前而言,经过多次尝试,这种方法虽然不太干净,但仍然有效。
let time = "02:00 p. m.";
time = time.replace(/(.*?\s)([ampAMP]).*?([ampAMP]).*?$/, "$1$2$3");
console.log(time);
带着我选择的答案
let time = "02:00 a. m.";
time = time.replace(/\b(\d{1,2})\s*:\s*(\d{1,2})\s*([ap])\.\s*m\./i, "$1:$2 $3m");
console.log(time);
但顺便说一句我最后还是这么做了
let time = "02:00 a. m.";
time = time .replace(/\.\s*/g, "");
console.log(time);
因为虽然很好,但我的表现有问题。
希望它能帮上忙
发布于 2022-12-04 16:57:43
以取代“上午”案文。或者用"am“和文本"p”来表示"am“。或者字符串中带有"pm“的"pm”,可以使用以下正则表达式:
/^(.?\s)(a.\sm\p.\s*m)/g
这个正则表达式将与文本“a.m.”匹配。或字符串开头的"am“(由^字符表示),在任意数量的字符后面加上空格(由.*?\s模式指示)。它还将匹配文本“下午”。或者"pm“也是这样。
要在替换()方法中使用这个正则表达式,可以将它作为第一个参数传递,"am“或"pm”作为第二个参数,这取决于匹配的文本。例如:
替换(/^(.?\s)( a. \sm\s*m)/g,“$1 am”;//返回“凌晨2:0”
替换(/^(.?\s)(a.\sm\s*m)/g,“$1 1pm”;//返回"2:0“
编辑
以取代“上午”案文。或者用"am“和文本"p”来表示"am“。或者"pm“动态,您可以使用一个正则表达式与捕获组匹配字符串的"am”或"pm“部分,然后在替换字符串中使用捕获组。
下面是一个可以使用的正则表达式示例:
/^(.?\s)(a.\sm\p.\s*m)/g
这个正则表达式将与文本“a.m.”匹配。或字符串开头的"am“(由^字符表示),在任意数量的字符后面加上空格(由.*?\s模式指示)。它还将匹配文本“下午”。或者"pm“也是这样。与"am“或"pm”匹配的字符串部分将在第二个捕获组中捕获(由正则表达式第二部分的括号表示)。
要在替换()方法中使用这个正则表达式,可以使用替换字符串中的$2占位符来引用第二个捕获组。例如:
替换(/^(.?\s)( a. \sm\s*m)/g,“$1$2”;//返回“凌晨2:0”
(/^(.?\s)(a.\sm\s*m)/g,“$1$2”;//返回"2:0 pm“
https://stackoverflow.com/questions/74678747
复制相似问题