【问题标题】:Replace final comma in a string with "and"用“and”替换字符串中的最后一个逗号
【发布时间】:2015-05-01 10:15:14
【问题描述】:

我有一个生成的字符串,本质上是一个列表。这个字符串是用户可以读取的,所以我试图很好地格式化它。我使用逗号和空格分隔生成的列表:

(a+'').replace(/,/g, ", ");

生产

1, 2, 3, 4

但是,我想将最后一个逗号更改为“, and”,这样它就变成了

1, 2, 3, and 4

我尝试了以下方法:

((a+'').replace(/,/g, ", ")).replace(/,$/, ", and");

但它不起作用,我认为这是因为它只是在字符串末尾查找逗号,而不是字符串中的最后一个逗号,对吗?

同样,如果字符串中只有 2 个项目,我希望将逗号替换为“and”,而不是“, and”,以便在语法上更有意义。

我怎样才能实现我正在寻找的东西?

【问题讨论】:

    标签: javascript jquery regex


    【解决方案1】:

    你可能想要

    ,(?=[^,]+$)
    

    例如:

    "1, 2, 3, 4".replace(/,(?=[^,]+$)/, ', and');
    

    (?=[^,]+$) 检查该逗号后是否有逗号。 (?!.*,) 也可以。

    您甚至可以检查是否还没有and

    ,(?!\s+and\b)(?=[^,]+$)
    

    工作示例:https://regex101.com/r/aE2fY7/2

    【讨论】:

    • 性能问题:哪个正则表达式在你的和@Toto 之间表现更好?
    • @ColOfAbRiX - 我猜 vks 的更快,我们甚至可以删除捕获组(替换为 $&)。以我的经验,正则表达式相对较慢,所以如果性能真的很重要,那么短字符串操作会更好。
    【解决方案2】:
    (.*,)
    

    您可以使用这个简单的正则表达式。替换为$1 and\1 and。查看演示。

    https://regex101.com/r/uE3cC4/8

    var re = /(.*,)/gm;
    var str = '1, 2, 3, 4';
    var subst = '$1 and';
    
    var result = str.replace(re, subst);
    

    【讨论】:

    • 我将根据您的回答替换最后一个逗号。谢谢!['first','sporty','system'].join(', ').replace( /(.*)\,/gm, '$1 and')
    【解决方案3】:

    怎么样:

    ((a+'').replace(/,/g, ", ")).replace(/,([^,]*)$/, ", and $1");
    

    【讨论】:

      【解决方案4】:

      你可以试试

      list1=[]
      list2=[1, 2, 3, 4]
      list2Str=(str(list2).replace("[","").replace("]","").replace("'",""))
      for i in range (0,len(list2Str)):
        if list2Str[i] == ',':
          list1.append(i)
      list1.sort(reverse=True)
      list2Str = list2Str[:list1[0]] + ' and' + list2Str[list1[0]+1:]
      print (list2Str)
      

      有点啰嗦,但很有效,而且相当简单

      【讨论】:

        【解决方案5】:
        var index = a.lastIndexOf(',');
        a.replaceAt(index, ', and');
        

        在哪里:

        String.prototype.replaceAt=function(index, character) {
            return this.substr(0, index) + character + this.substr(index+character.length);
        }
        

        【讨论】:

          猜你喜欢
          • 2011-08-02
          • 2017-06-05
          • 1970-01-01
          • 2019-07-01
          • 2012-12-16
          • 2011-10-06
          • 1970-01-01
          • 1970-01-01
          • 2012-06-02
          相关资源
          最近更新 更多