1

我有一个类似的字符串:

foo title:2012-01-01 bar

我需要在哪里获取“标题:2012-01-01”并将日期部分“2012-01-01”替换为特殊格式。我只是不擅长 RegExp,目前有:

'foo from:2012-01-01 bar'.replace(/from:([a-z0-9-]+)/i, function() {
    console.log(arguments);
    return 'replaced';
})

然后返回

foo replaced bar 

这是一个开始,但并不完全正确。我需要不替换“来自:”,只替换“2012-01-01”。尝试使用 (?:from:) 但这并没有阻止它替换 'from:'。另外,我需要考虑到'from:'和'2012-01-01'之间可能有一个空格,所以它也需要匹配这个:

foo title: 2012-01-01 bar
4

2 回答 2

3

以下应该做你需要的;自己测试过:

'foo from:2012-01-01 bar'.replace(/(\w+:\s?)([a-z0-9-]+)/i, function(match, $1) {
    console.log(arguments);
    return $1 + 'replaced';
});

演示

它将匹配title: etcfrom:etc。The$1是第一个匹配的组,(\w+:\s?)the\w匹配任何单词字符,而\s?匹配至少一个空格或不匹配空格。

于 2012-07-31T20:57:56.563 回答
0

如果格式始终from:...存在,则根本不需要捕获“来自”文本:

'foo from:2012-01-01 bar'.replace(/from:\s*([a-z0-9-]+)/i, function() {
    console.log(arguments);
    return 'from: replaced';
});

但是,如果要保留间距,可以执行以下操作:

'foo from:2012-01-01 bar'.replace(/from:(\s*)([a-z0-9-]+)/i, function(match, $1) {
    console.log(arguments);
    return 'from:' + $1 + 'replaced';
});
于 2012-07-31T21:36:55.327 回答