JavaScript / RegExp替换字符串的一部分

时间:2012-07-31 20:14:25

标签: javascript regex string replace

我有一个类似的字符串:

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 

这是一个开始但不完全正确。我需要'from:'不要被替换,只需更换'2012-01-01'。尝试使用(?:from :),但这并没有阻止它取代'from:'。此外,我需要考虑到'from:'和'2012-01-01'之间可能存在空格,因此它也需要匹配:

foo title: 2012-01-01 bar

2 个答案:

答案 0 :(得分:3)

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

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

DEMO

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

答案 1 :(得分:0)

如果格式始终为from:...,则根本不需要捕获'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';
});