如何使正则表达式在其中包含一系列名称和标题大小写中的所有名称,除了以下模式,这些模式应该单独使用:[\-\ ][A-Z][a-z]{1,2}[A-Z]
和[\-\ ][v][ao][n]
用于JavaScript?
也就是说,忽略McD
,MacD
,-McD
,-MacD
,von
和van
?也就是说,我想“修复”在混乱的情况下键入的名称,例如LaToNYA von fRANKENSTEIN McDONALD-MacINTOSH
为LaTonya von Frankenstein McDonald-MacIntosh
。
我使用以下内容作为“title casing”(将每个名字的第一个字母大写,并将名称的其余部分用于下限):
name = name.replace(/\b\w+/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
当应用于上述名称时,这会产生Latonya Von Frankenstein Mcdonald-Macintosh
,这是不可取的,特别是如果输入姓名的人输入LaTonya
,von
,McDonald
和MacIntosh
并且它违背了他们的意愿。如何调整我的替换以保留单独作为正则表达式给出的模式(如果用户键入latonya
,MACDONALD
或VON
,那么我可以更改为{{1} },Latonya
或Macdonald
)?