正则表达式用值替换所有逗号

Jef*_*eff 11 javascript regex

我有一个看起来像这样的字符串:"Doe,John,A"(姓氏,名字,中间首字母).

我正在尝试编写一个将字符串转换为"Doe*John*A"的正则表达式.

但是,我必须考虑到这个字符串的所有空格,所以"Doe,John,A"仍将转换为"Doe*John*A".

此外,字符串"Doe John A"应转换为"Doe*John*A".

我开始写这篇文章了,但是我想我已经停留在这个空间以及用户不提供逗号的可能性.

这就是我所拥有的:

var myString = "John, Doe, A";
var myOtherString = "John  Doe   A";


var myFunction = function (aString) {
        aString = aString.replace(", ", "*");
        aString = aString.replace(", ", "*");

return aString;

};
Run Code Online (Sandbox Code Playgroud)

这些都应该回归"Doe*John*A".

我想我在这个功能中重复了太多.我也没有考虑到不提供逗号的可能性.

有一个更好的方法吗?

Mar*_*der 15

就在这里.使用replace带有正则表达式的函数.这有一些优点.首先,您不必再召唤两次.其次,考虑任意数量的空格和可选的逗号非常容易:

aString = aString.replace(/[ ]*,[ ]*|[ ]+/g, '*');
Run Code Online (Sandbox Code Playgroud)

请注意,空格周围的方括号是可选的,但我发现它们使空格字符更容易阅读.如果你想允许/删除任何类型的空格(标签和换行符),请\s改用:

aString = aString.replace(/\s*,\s*|\s+,/g, '*');
Run Code Online (Sandbox Code Playgroud)

请注意,在这两种情况下,我们都不能简单地使逗号可选,因为这将允许零宽度匹配,这将*在字符串中的每个位置引入一个.(感谢CruorVult指出这一点)


Cru*_*ult 6

如果要替换所有非单词字符,请尝试以下操作:

str.replace(/\W+/g, '*');
Run Code Online (Sandbox Code Playgroud)