匹配正则表达式中单个字符的第n次出现

时间:2017-07-13 00:17:56

标签: javascript regex

我很难找到任何符合我需要的正则表达式,尽管这个请求在我开始时看起来很简单。希望在这里得到帮助。

我们代码中的早期错误是以YYYY-MM-DD HH:mm:ss:SSS格式发送日期。这不是有效的ISO,因为毫秒是以冒号而不是句点进行的。

我希望快速正则表达式与JS .replace()一起使用以匹配第三个冒号:并将其替换为句点.正如我所说,这听起来很基本 - 但是我发现没有任何有用的东西,也没有其他地方建议修复类似问题在我的情况下有效。

感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

您可以使用/^((?:[^:]*:){2}[^:]*):(.*)$/; (?:[^:]*:){2}匹配第二个冒号,^((?:[^:]*:){2}[^:]*)匹配从字符串开头到第三个冒号的字符串; (.*)$匹配第三个冒号之后的所有内容;捕获第三个冒号之前的内容以及之后的内容,使用后引用重新格式化字符串:



console.log("YYYY-MM-DD HH:mm:ss:SSS".replace(/^((?:[^:]*:){2}[^:]*):(.*)$/, "$1.$2"))




或者对于这个特定情况更简单的一个,用.替换最后一个冒号:



console.log("YYYY-MM-DD HH:mm:ss:SSS".replace(/:(?=[^:]*$)/, "."))