0

我有一个字符串2005:10:29 12:23:53,我希望只替换前两次出现的:with-

预期结果2005-10-29 12:23:53

编辑:

我在 KDE 的krename工具中需要这个正则表达式,我无法编辑/格式化原始[exifExif.Image.DateTime]女巫返回不需要的2005:10:29 12:23:53格式,但是有一个Find and Replace后期处理字符串

(?<=\d{4}):|:(?=\d{2}\s)在 rubular 上完成这项工作,但在 KDE 中没有 :(

我相信还有更多的解决方案。

编辑:

:(?=\d{2}:\d{2}\s)|:(?=\d{2}\s)甚至可以在 KDE 上使用

我阅读后找到了这个解决方案

You can use a full-fledged regular expression inside the lookahead.
Most regular expression engines only allow literal characters and
alternation inside lookbehind, since they cannot apply regular
expression backwards.

正则表达式教程中

4

4 回答 4

3

正如 scibuff 所建议的,在 Ruby 中,最好不要使用正则表达式。

require 'date'
date = DateTime.parse("2005:10:29 12:23:53", "%Y:%m:%d %H:%M:%S")
date.strftime("%Y-%m-%d %H:%M:%S")
于 2012-03-22T10:17:13.483 回答
1

JavaScript:

版本 1

str = str.split(' ')[0].replace(/\:/g,'-')+' '+str.split(' ')[1]

版本 2

str = str.replace(/(\d{4}):(\d{2}):(\d{2})(.*)/,"$1-$2-$3 $4")

演示

于 2012-03-22T10:08:26.630 回答
-1

Simply call replace() twice:

"2005:10:29 12:23:53".replace(/:/,'-').replace(/:/,'-')
于 2012-03-22T10:30:51.927 回答
-1

再次使用正则表达式来实现更简单、更优雅和更有效的方式

var date = new Date('2005:10:29 12:23:53');

然后相应地格式化date,例如

function formatDate( date ){

    return date.getFullYear() + '-' + ( get.getMonth() + 1 ) + '-' + ... ;

}
于 2012-03-22T10:09:47.060 回答