正则表达式从字符串中删除数字(仅年份)

时间:2016-02-26 08:11:58

标签: javascript regex string

我知道将两个单词分开的正则表达式如下:

输入:

'WonderWorld'

输出:

'Wonder World'

"WonderWorld".replace(/([A-Z])/g, ' $1');

现在我希望从字符串中删除年份格式的数字,应该在上面的代码中进行哪些更改来获取:

输入

'WonderWorld 2016'

输出

'Wonder World'

4 个答案:

答案 0 :(得分:2)

试试这个:

"WonderWorld 2016".replace(/([A-Z])|\b[0-9]{4}\b/g, ' $1')

答案 1 :(得分:2)

您可以将大写字母前的位置(但不包括行的开头)与\B(?=[A-Z])匹配,并匹配尾随空格(如果有的话,在结尾前有4位数字\s*\b\d{4}\b)。在回调中,检查匹配是否为空,并相应地替换。如果match为空,我们会匹配大写字母前的位置(=>替换为空格),如果不匹配,我们会在年末匹配年份(=>替换为空字符串)。由于\b周围的\d{4}字边界,四位数字块仅作为整数字匹配。

var re = /\B(?=[A-Z])|\s*\d{4}\b/g; 
var str = 'WonderWorld 2016';
var result = str.replace(re, function(match) {
  return match ? "" : " ";
});
document.body.innerHTML = "<pre>'" + result + "'</pre>";

类似的方法,只是匹配粘合词的不同模式(可能会变得更可靠):

var re = /([a-z])(?=[A-Z])|\s*\b\d{4}\b/g; 
var str = 'WonderWorld 2016';
var result = str.replace(re, function(match, group1) {
  return group1 ? group1 + " " : "";
});
document.body.innerHTML = "<pre>'" + result + "'</pre>";

此处,([a-z])(?=[A-Z])匹配并捕获到第1组小写字母后面跟一个大写字母,在回调中,我们检查组1是否匹配({{1} }})。如果匹配,我们返回group1 ? +空格。如果没有,我们在年底匹配年份,并将其删除。

答案 2 :(得分:1)

这个怎么样,一个正则表达式可以做你想做的事情:

"WonderWorld 2016".replace(/([A-Z][a-z]+)([A-Z].*)\s.*/g, '$1 $2');
"Wonder World"

将数字和空格分开。

答案 3 :(得分:0)

重新编码@WiktorStribiżew的解决方案:

str可以是任何“WonderWorld 2016”| “OneTwo 1000 ThreeFour”| “Ruby 1999 IamOnline”

str.replace(/([a-z])(?=[A-Z])|\s*\d{4}\b/g, function(m, g) {
  return g ? g + " " : "";
});