正则表达式从字符串
删除数(仅适用于年)我知道,分开两个词如下正则表达式:正则表达式从字符串
输入:
'WonderWorld'
输出:
'Wonder World'
"WonderWorld".replace(/([A-Z])/g, ' $1');
现在我期待从字符串中删除年份格式的数字,在上面的代码中应该做什么修改得到:
输入
'WonderWorld 2016'
输出
'Wonder World'
可以大写字母前相配的位置(但不包括行的开头)用\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的解决方案
我建议的解决方案基于假设,与您的假设相同。 Mine认为只能删除字符串末尾的一年(4位数字)。如果不是,'$'应该用'\ b'替换。这是一个**正则表达式解决方案**,我只是在'|'运算符的帮助下添加*替换*。所有替换都是在处理* 1 *正则表达式时完成的,因此它是1-regex传递。 –
其可行的解决方案,我改变$与\ b传递'WonderWorldGoodHlu 0000 FrankyDrank',谢谢 –
感谢您的精度,我更新了答案,按预期工作。 –
这个怎么样,一个正则表达式做你想要什么:
"WonderWorld 2016".replace(/([A-Z][a-z]+)([A-Z].*)\s.*/g, '$1 $2');
"Wonder World"
从数字和空格分开得到的一切。
什么' WonderWorld NEW!'?它不会以一年结束,但“NEW”将被删除。请参阅[演示](https://regex101.com/r/bG3fR8/1) - 此解决方案不起作用。请修复。 –
不,“WonderWorld 2016a”与我的解决方案完美配合 - >“Wonder World 2016a”。由于不是一年,最终的'2016a'不会被删除。一年是一个4位数字,不是一串字母数字。您的解决方案删除*最后的所有*。 @ Zeeschan:你确定这是需要的吗? –
你的正则表达式只适用于2个字符串它不是通用的,顺便说一句,谢谢。 –
试试这个:
"WonderWorld 2016".replace(/([A-Z])|\b[0-9]{4}\b/g, ' $1')
@bureaquete我已经修改它是一个正则表达式 – Adam
'WonderWorldGoodHlu 0000 FrankyDrank'失败了您的正则表达式 –
重码:
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 + " " : "";
});
应使用'.replace(/([AZ] [AZ] +)(+)/克, '$ 1 $ 2');'用于分离两个词 –