首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现类似于Java/C#的日期格式(如"dddd/mm/yy")

实现类似于Java/C#的日期格式(如"dddd/mm/yy")
EN

Stack Overflow用户
提问于 2013-08-02 06:40:35
回答 4查看 302关注 0票数 2

总的来说,我想实现JavaScript日期值的格式化函数,这些值接受类似于Java/C#格式的字符串:"dddd/mm/yy“等等。

我当前的问题范围是-我有一个带有d‘s的字符串。

代码语言:javascript
复制
'd/dd/ddd/dddd'
'dd/d/ddd'
'dddd     ddd       /dd'

d's之间的空白可以是单个/更多的空格,也可以是:(冒号)或/ (斜杠),也可以是所有这些字符(可能是一个或两个或三个字符)。示例:

代码语言:javascript
复制
'dd/dddd:ddd  d'
'dd:/ddd d   d'

如果是的话

  • 一个d,我应该用'somestring1'替换(意味着我有一些字符串来替换那个特定的d)
  • 两个d,用'someotherString2'代替
  • 三个d,用'someotherotherstring'代替
  • d,用'someotherotherotherstring'代替

具有各自的间距或:(冒号)和/(斜杠)

我正在尝试使用正则表达式。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-02 06:46:37

用两种替换方法很容易:

代码语言:javascript
复制
var res = "'dd/dddd:ddd  d'".replace(/d(?![^d])/g, '0')
                            .replace('d', '1');

它的意思是“用0替换所有'd‘,而不是’non‘”,然后用1替换所有剩余的'd’。

你甚至可以用另一种方式来做:

代码语言:javascript
复制
var res = "'dd/dddd:ddd  d'".replace(/d(?=d)/g, '0')
                            .replace('d', '1');

它的意思是“用0替换所有的'd‘和'd’,然后用1替换剩下的'd‘。

如果要在替换中使用函数,可以这样做:

代码语言:javascript
复制
var res = "'dd/dddd:ddd  d'".replace(/(d(?=d))|(d)/g, 
    function(match, p1, p2) { 
        return p1 ? '0' : '1'; 
    } 
);

结果是一样的。我们有两个捕获组,一个用于“d”,另一个用于“d”,另一个用于其余的“d”(S)。这些匹配被传递给一个函数,该函数在p1p2中接收捕获。显然,对于每个匹配,只能定义一个捕获(p1p2) (因为它们是可选的),所以使用三元操作符?,我检查p1是否有一个值,然后返回0,否则返回1

表示已更改的问题

如果要用字符串数组替换,可以执行以下操作:

代码语言:javascript
复制
var replaces = [ "some1", "some2", "some3", "some4" ];

var res = "'dd/dddd:ddd  d ddddd'".replace(/d+/g, 
    function(match) { 
        return match.length - 1 < replaces.length ? // check if there is a substitution
            replaces[match.length - 1] : // if there is a substitution
            match; // otherwise leave the d(s)
    } 
);
票数 7
EN

Stack Overflow用户

发布于 2013-08-02 06:48:31

既然你已经提到这是为了约会,我猜101001等并不是唯一可能的替代。

因此,您可以找到任何一个dd的组与/d+/

代码语言:javascript
复制
var revised = original.replace(/d+/, function (dees) {
    return // ...;
});

function中,可以测试dees.length以确定要return的值。

关于你列举的例子:

代码语言:javascript
复制
if (dees.length == 1) {
    return 'somestring1';
} else if (dees.length == 2) {
    return 'someotherString2';
} else if (dees.length == 3) {
    return 'someotherotherstring';
} else if (dees.length == 4) {
    return 'someotherotherotherstring';
}

还可以使用ObjectArraylength与键或索引匹配。

代码语言:javascript
复制
var results = {
    1: 'somestring1',
    2: 'someotherString2',
    3: 'someotherotherstring',
    4: 'someotherotherotherstring'
];

return results[dees.length] || 'somethingelse';
票数 3
EN

Stack Overflow用户

发布于 2013-08-02 07:00:35

数字值的基本格式可以不用regex使用更简单的代码来处理:

代码语言:javascript
复制
  var format = "dddd/ddd/dd/d";

  var result = format.replace("dddd", formatWithFourDigits(year))
                     .replace("ddd",  formatWithThreeDigits(year))
                     .replace("dd",   formatWithTwoDigits(year))
                     .replace("d",    formatWithOneDigits(year));

对于更复杂的问题,首先将字符串标记化,然后将每个令牌(如"dddd")映射到为该格式执行格式设置的函数。标记化可以使用类似于其他答案中所示的正则表达式来完成。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18010328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档