【问题标题】:Regex replace all commas with value正则表达式用值替换所有逗号
【发布时间】:2012-12-19 15:40:57
【问题描述】:

我有一个如下所示的字符串:“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"。

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

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    是的,有。将 replace 函数与正则表达式一起使用。这有几个优点。首先,您不必再调用它两次。其次,计算任意数量的空格和可选的逗号真的很容易:

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

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

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

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

    【讨论】:

    • "Doe , John , A".replace(/\s*,?\s*/g, '*');//"*D*o*e**J*o*h*n**A*"
    • 如果我想用破折号替换 *s 怎么办?我可以把它改成aString = aString.replace(/[ ]*,[ ]*|[ ]+/g, '-'); ?——顺便说一句,谢谢你的帮助。
    • @1__ 是的,第二个参数是替换字符串
    • @CruorVult 你能解决我的问题吗?我知道你已经解决了这类问题。 link
    【解决方案2】:

    如果你想替换所有非单词字符试试这个:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 再说一遍,这不是正则表达式的编写方式以及修饰符在 javascript 中的应用方式
      【解决方案4】:

      试试这个删除所有的空格和逗号,然后用*替换。

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

      编辑为从模式中删除“至少两个项目”。但至少要有一个项目。

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

      Reference: on Rublar。但是,根据 m.buettner,您最好使用正则表达式:)

      【讨论】:

      • 您应该将其设为“至少一项”。现在您将获得与之前的空格和逗号一样多的*
      • 是的,没错,但这不是你回答的模式(你应该使用regexpal,因为这是一个Javascript问题)
      • @m.buettner 谢谢你的正则表达式。我通常依赖于 rublar 中的多次斩波,然后针对 c#、javascript 等进行调整。现在这让事情变得方便了。
      • 还有RegexHero 用于.NET 和RegexPlanet 用于其他一些(不过,我认为它主要是Java 的首选测试器)
      猜你喜欢
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多