我知道将两个单词分开的正则表达式如下:
输入:
'WonderWorld'
输出:
'Wonder World'
"WonderWorld".replace(/([A-Z])/g, ' $1');
现在我希望从字符串中删除年份格式的数字,应该在上面的代码中进行哪些更改来获取:
输入
'WonderWorld 2016'
输出
'Wonder World'
答案 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 + " " : "";
});