2016-02-26 179 views
3

删除数(仅适用于年)我知道,分开两个词如下正则表达式:正则表达式从字符串

输入:

'WonderWorld' 

输出:

'Wonder World' 

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

现在我期待从字符串中删除年份格式的数字,在上面的代码中应该做什么修改得到:

输入

'WonderWorld 2016' 

输出

'Wonder World' 
+0

应使用'.replace(/([AZ] [AZ] +)(+)/克, '$ 1 $ 2');'用于分离两个词 –

回答

2

可以大写字母前相配的位置(但不包括行的开头)用\B(?=[A-Z])并匹配尾随空格,如果任何与年底前右4位数(\s*\b\d{4}\b )。在回调中,检查比赛是否为空,并进行相应更换。如果match为空,我们在大写字母(=>替换为空格)之前匹配位置,如果不匹配,我们在末尾匹配年份(=>替换为空字符串)。由于\d{4}周围的\b字边界,所以四个数字块只与整个字匹配。

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是否匹配(与group1 ?)。如果匹配,我们返回group1 +一个空格。如果不是,我们在年底匹配并删除它。的@WiktorStribiżew的解决方案

+0

我建议的解决方案基于假设,与您的假设相同。 Mine认为只能删除字符串末尾的一年(4位数字)。如果不是,'$'应该用'\ b'替换。这是一个**正则表达式解决方案**,我只是在'|'运算符的帮助下添加*替换*。所有替换都是在处理* 1 *正则表达式时完成的,因此它是1-regex传递。 –

+1

其可行的解决方案,我改变$与\ b传递'WonderWorldGoodHlu 0000 FrankyDrank',谢谢 –

+0

感谢您的精度,我更新了答案,按预期工作。 –

1

这个怎么样,一个正则表达式做你想要什么:

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

从数字和空格分开得到的一切。

+0

什么' WonderWorld NEW!'?它不会以一年结束,但“NEW”将被删除。请参阅[演示](https://regex101.com/r/bG3fR8/1) - 此解决方案不起作用。请修复。 –

+0

不,“WonderWorld 2016a”与我的解决方案完美配合 - >“Wonder World 2016a”。由于不是一年,最终的'2016a'不会被删除。一年是一个4位数字,不是一串字母数字。您的解决方案删除*最后的所有*。 @ Zeeschan:你确定这是需要的吗? –

+0

你的正则表达式只适用于2个字符串它不是通用的,顺便说一句,谢谢。 –

2

试试这个:

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

@bureaquete我已经修改它是一个正则表达式 – Adam

+0

'WonderWorldGoodHlu 0000 FrankyDrank'失败了您的正则表达式 –

0

重码:

str可以是任何 “的WonderWorld 2016” | “OneTwo 1000 1000 ThreeFour”| “红宝石1999 IamOnline”

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