我有一个如下所示的字符串:“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"
.
我认为我在这个函数中重复太多了。我也没有考虑不提供逗号的可能性。
有一个更好的方法吗?
就在这里。使用replace
使用正则表达式代替函数。这有一些优点。首先,您不必再调用它两次。其次,考虑任意数量的空格和可选的逗号真的很容易:
aString = aString.replace(/[ ]*,[ ]*|[ ]+/g, '*');
请注意,空格周围的方括号是可选的,但我发现它们使空格字符更容易阅读。如果您想允许/删除那里的任何类型的空格(制表符和换行符),请使用\s
反而:
aString = aString.replace(/\s*,\s*|\s+,/g, '*');
请注意,在这两种情况下,我们不能简单地使逗号可选,因为这将允许零宽度匹配,这会引入*
在字符串中的每个位置。 (感谢 CruorVult 指出了这一点)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)