Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式将所有逗号替换为值_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式将所有逗号替换为值

Javascript 正则表达式将所有逗号替换为值,javascript,regex,Javascript,Regex,我有这样一个字符串:“Doe,John,a”(lastname,firstname,中间的首字母) 我正在尝试编写一个正则表达式,将字符串转换为“Doe*John*a” 但是,我必须考虑这个字符串的所有空格,所以“Doe,John,A”仍然会转换为“Doe*John*A” 此外,字符串“Doe John A”应转换为“Doe*John*A” 我开始写这篇文章,但我想我被空格卡住了&用户可能不提供逗号 以下是我所拥有的: var myString = "John, Doe, A"; var myO

我有这样一个字符串:“Doe,John,a”(lastname,firstname,中间的首字母)

我正在尝试编写一个正则表达式,将字符串转换为“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”

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


有更好的方法吗?

是的,有。用正则表达式替换
函数。这有一些好处。首先,你不必再叫它两次了。其次,很容易考虑任意数量的空格和可选的逗号:

aString = aString.replace(/[ ]*,[ ]*|[ ]+/g, '*');
请注意,空格周围的方括号是可选的,但我发现它们使空格字符更易于阅读。如果要允许/删除任何类型的空白(也包括制表符和换行符),请使用
\s

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

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

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

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

这将用
*

替换所有逗号和空格链。请尝试删除所有空格和逗号,然后替换为*

Myname=Myname.replace(/[,\s]/,“*”)

编辑为从模式中删除“至少两项”。但至少在这一点上

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


。但是,最好按照m.buettner:)使用regexpal

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

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

同样,这不是正则表达式的编写方式,也不是javascript
中修饰符的应用方式“Doe,John,A”//“*D*o*e**J*o*h*n**A*”
如果我想用破折号替换*s怎么办?我是否可以将其更改为
aString=aString.replace(/[]*,[]*|[]+/g,“-”)--谢谢你的帮助性回答,顺便说一句。@1__;是的,第二个参数是替换string@CruorVult你能解决我的问题吗?我知道你已经解决了这类问题。你应该让它“至少有一个项目”。现在您将获得与之前相同数量的
*
,没错,但这不是您答案中的模式(您应该使用,因为这是一个Javascript问题)@m.buettner感谢您的regexpal。我通常依赖于rublar中的多次切分,然后根据c#、javascript等进行调整。。现在,这使事情变得方便了。对于.NET和其他一些工具(我认为主要是Java的go to tester),让我们来看看