我有一个类似的字符串:
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
答案 0 :(得分:3)
以下应该做你需要的;自己测试了一下:
'foo from:2012-01-01 bar'.replace(/(\w+:\s?)([a-z0-9-]+)/i, function(match, $1) {
console.log(arguments);
return $1 + 'replaced';
});
它会匹配title: etc
和from: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';
});