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

时间:2012-12-19 15:40:58

标签: 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;

};

这些都应该返回"Doe*John*A"

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

有更好的方法吗?

4 个答案:

答案 0 :(得分:15)

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

aString = aString.replace(/[ ]*,[ ]*|[ ]+/g, '*');

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

aString = aString.replace(/\s*,\s*|\s+,/g, '*');

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

答案 1 :(得分:6)

如果您想要替换所有非单词字符,请尝试以下方法:

str.replace(/\W+/g, '*');

答案 2 :(得分:3)

String.replace仅替换第一次出现。要全部替换它们,请为“global”添加“g”标志。您还可以使用字符组和+运算符(一个或多个)来匹配字符串:

aString.replace("[,\s]+", "*", "g");

这将用*替换所有逗号和空格链。

答案 3 :(得分:1)

尝试这样做以删除所有空格和逗号,然后替换为*。

Myname= myname.replace(/[,\s]/,"*")

编辑为从图案中删除“至少两个项目”。但至少要有项目。

Myname= myname.replace(/([,\s]{1,})/,"*")

Reference: on Rublar。然而,根据m.buettner,你最好使用regexpal:)