用"和"替换字符串中的最后一个逗号。

时间:2015-05-01 10:15:15

标签: javascript jquery regex

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

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

产生

1, 2, 3, 4

但是,我想将最后一个逗号更改为"和",以便它读取

1, 2, 3, and 4

我尝试过以下方法:

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

但它没有用,我认为是因为那只是在字符串末尾查找逗号,而不是字符串中的最后一个逗号,对吧?

同样,如果字符串中只有2个项目,我希望将逗号替换为"和"而不是"和",以使其更有意义语法。

我如何实现我想要的目标?

5 个答案:

答案 0 :(得分:5)

你可能想要

,(?=[^,]+$)

例如:

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

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

您甚至可以检查是否已经and

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

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

答案 1 :(得分:4)

(.*,)

您可以使用$1 and\1 and这个简单的regex.Replace。请参阅演示。

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);

答案 2 :(得分:0)

怎么样:

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

答案 3 :(得分:0)

您可以尝试

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)

有点long,但它确实有效并且非常简单

答案 4 :(得分:-1)

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);
}