【问题标题】:Matching the nth occurrence of a single character in regex [duplicate]匹配正则表达式中单个字符的第 n 次出现 [重复]
【发布时间】:2017-07-13 00:17:56
【问题描述】:

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

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

我想要一个快速的正则表达式与 JS .replace() 结合使用,以匹配第三个冒号 : 并将其替换为句点 . 正如我所说,这听起来很基本——但我什么也没找到这行得通,在我的情况下,没有其他地方可以解决类似问题的建议解决方案。

感谢任何帮助。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    您可以使用/^((?:[^:]*:){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(/:(?=[^:]*$)/, "."))

    【讨论】:

      猜你喜欢
      • 2015-04-10
      • 1970-01-01
      • 2012-04-18
      • 2011-01-02
      • 2016-01-15
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      相关资源
      最近更新 更多