我有一个生成的字符串,基本上是一个列表。这个字符串是用户可以阅读的,所以我试图很好地合成它。我使用逗号和空格分隔生成的列表:
(a+'').replace(/,/g, ", ");
产生
1, 2, 3, 4
但是,我想将最后一个逗号更改为"和",以便它读取
1, 2, 3, and 4
我尝试过以下方法:
((a+'').replace(/,/g, ", ")).replace(/,$/, ", and");
但它没有用,我认为是因为那只是在字符串末尾查找逗号,而不是字符串中的最后一个逗号,对吧?
同样,如果字符串中只有2个项目,我希望将逗号替换为"和"而不是"和",以使其更有意义语法。
我如何实现我想要的目标?
答案 0 :(得分:5)
你可能想要
,(?=[^,]+$)
例如:
"1, 2, 3, 4".replace(/,(?=[^,]+$)/, ', and');
(?=[^,]+$)
检查此逗号后没有逗号。 (?!.*,)
也可以。
您甚至可以检查是否已经and
:
,(?!\s+and\b)(?=[^,]+$)
答案 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);
}