如何转换字符串中的日期格式?将DD.MM.YYYY转为YYYY-MM-DD
解决字符串中DD.MM.YYYY到YYYY-MM-DD的格式转换问题
你原来的正则之所以在包含其他内容的字符串里失效,是因为用了^(字符串开头)和$(字符串结尾)锚点,它只会匹配整个字符串就是日期的情况,一旦字符串里有其他内容,就匹配不到目标日期了。另外还有个小问题:正则里的.是匹配任意字符的,不是特指小数点,得转成\.才能精确匹配日期里的点。
直接用下面的代码就能解决问题:
const input = "something here 19.09.2022 another string here"; const converted = input.replace(/(\d{1,2})\.(\d{1,2})\.(\d{4})/g, "$3-$2-$1"); console.log(converted); // 输出:"something here 2022-09-19 another string here"
关键修改点:
- 去掉
^和$锚点:让正则能匹配字符串中任意位置的日期,不用局限于整个字符串 - 把
.转义成\.:确保只匹配日期里的小数点,不会误匹配其他字符 - 添加
g全局标志:一次性替换字符串里所有符合格式的日期,不是只替换第一个
如果想要更严谨,只替换有效的日期(比如日不超过31,月不超过12),可以用更严格的正则:
const input = "something here 32.09.2022 another string here 25.12.2023"; const converted = input.replace(/(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(\d{4})/g, "$3-$2-$1"); console.log(converted); // 输出:"something here 32.09.2022 another string here 2023-12-25"
这个正则会过滤掉像32.09.2022这种无效日期,只转换合法的格式。
内容的提问来源于stack exchange,提问作者smolo
相关产品推荐
相关产品推荐

