剥离标点符号的正则表达式也错误地将Báenou这个词变成了Benou

Cor*_*ips 4 javascript regex string sanitization punctuation

这个正则表达式的目标是删除标点字符:

var myTxt = "Welcome, Visitor: The Royal Kingdom Of Báenou";
myTxt = myTxt.replace(/[^a-zA-Z0-9 ]+/g, '').replace('/ {2,}/',' ');
alert(myTxt);
Run Code Online (Sandbox Code Playgroud)

所以上面的文字应该变成这样:

Welcome Visitor The Royal Kingdom Of Báenou
Run Code Online (Sandbox Code Playgroud)

但相反,它错误地á放入in Báenou产生这个:

Welcome Visitor The Royal Kingdom Of Benou
Run Code Online (Sandbox Code Playgroud)

我可以对正则表达式做出的最简单的改变是什么让它按预期工作?

Pla*_*ure 10

您的问题是,您正在删除任何不在"白名单"中的内容,您将其定义为所有(非重音)字母,数字和空格,并将其替换为空字符串.

由于á不在[a-z],它将被视为"标点符号"并被删除.

您需要的是过滤掉"黑名单"中的内容并主动替换它们.

试试像这样的正则表达式:

myTxt = myTxt.replace(/['";:,.\/?\\-]/g, '');
Run Code Online (Sandbox Code Playgroud)