Regex 如何替换字符串中除某些正则表达式以外的所有正则表达式模式?

Regex 如何替换字符串中除某些正则表达式以外的所有正则表达式模式?,regex,Regex,我如何制作一个正则表达式,以获取一个名称字符串和标题大小写,其中除了以下模式之外的所有名称,这些模式应该单独使用:[\-\][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 Mc

我如何制作一个正则表达式,以获取一个名称字符串和标题大小写,其中除了以下模式之外的所有名称,这些模式应该单独使用:
[\-\][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

我将以下内容用于“标题大小写”(每个名称的第一个字母大写,其余部分小写):

当应用于上述姓名时,这将导致
Latonya Von Frankenstein Mcdonald Macintosh
,这是不可取的,尤其是如果输入姓名的人键入
Latonya
Von
Mcdonald
Macintosh
,并违背他们的意愿进行更改。我如何调整我的replace以保留上面作为regex给出的模式(如果用户键入
latonya
MACDONALD
VON
,那么我可以毫无问题地更改为
latonya
MACDONALD
VON
)?

您可以使用

var name=“LaToNYA von fRANKENSTEIN McDONALD MacINTOSH”;
var expected=“LaTonya von Frankenstein McDonald MacIntosh”;
name=name.replace(/\b(v[ao]n |[A-Z][A-Z]{1,2}[A-Z])?(\w*)/g,函数($0,$1,$2){
返回$1?$1+2.toLowerCase():
$0.charAt(0.toUpperCase()+
($0.length>1?$0.substr(1.toLowerCase():“”);
});

console.log(名称“=>”,(预期===名称?“相同”:“不同”)
也应该添加JavaScript标记。破折号
-
与它有什么关系?而且,
\w
单词不包括破折号。你怎么知道一个名字的结尾/开头呢?Wiktor,这太完美了!你是一个regex大师!你应该把这个贴到regexlib.com上,因为我相信这对很多人都很有用。
name = name.replace(/\b\w+/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});