我有一个看起来像这样的字符串:“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"
。
我想我在这个功能中重复过多。我也没有考虑到不会提供逗号的可能性。
有更好的方法吗?
答案 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:)