我有一个字符串,我已经创建了,我想删除最后一个逗号,并将其替换为句号。我想保留所有其他的逗号。这里我试着用一个条件语句,它可以添加逗号,但是不能用句号代替最后一个。我在这方面是新手,我将非常感谢任何帮助。
for (var i = 0; i < petArray.length; i++) {
petObj = petArray[i];
likesString = petObj.name + " " + " is a " + petObj.type + " she " + " likes ";
for (var j = 0; j < petObj.likes.length; j++) {
if (j < petObj.likes.length) {
var likesString = likesString + petObj.likes[j] + ", ";
}
else if (j == petObj.likes.length) {
likesString.replace(", ", ".");
}
}
displayResult();
}
你好像很辛苦啊!使用harry的join()方法来构建列表。
for (var i = 0; i < petArray.length; i++) {
petObj = petArray[i];
likesString = petObj.name + " is a " + petObj.type + " she likes " +
petObj.likes.join(", ") + ".";
displayResult();
}
可以这样做:
str.replace(/,([^,]*)$/,".$1")
正则表达式匹配逗号后跟任意数量的非逗号,一直到字符串的末尾…根据定义,这是最后一个逗号。如果没有逗号,一个逗号或任意数量的逗号,它都可以工作。
注意,if部分必须始终为真,否则else部分永远不会执行:
for (var j = 0; j < petObj.likes.length; j++) {
if (j < petObj.likes.length) {
var likesString = likesString + petObj.likes[j] + ", ";
}
else if (j == petObj.likes.length) {
likesString.replace(", ", ".");
}
}
for循环只在该条件为真时继续,然后代码测试相同的条件。
你可以这样做:
for (var j = 0; j < petObj.likes.length; j++) {
if (j < petObj.likes.length-1) {
likesString = likesString + petObj.likes[j] + ", ";
}
else {
likesString = likesString + petObj.likes[j] + ". ";
}
}
有更好的方法来执行条件,不会重复那么多,但可能会达到你想要的效果。(我也固定了额外的'var'部分)
这里是学习和测试正则表达式的好地方:
本质上,您需要替换以下内容:
RegExp Pattern: /,([^,]+)$/
Replace Pattern: .$1
所以你的代码应该是这样的:
s.replace(/,([^,]+)$/, '.$1');
其中s
是您要替换的字符串。
别忘了把那一行设置成一个变量来保存。
要将字符串中最后出现的逗号替换为句号,可以使用:
var index = str.lastIndexOf(",");
var newstr = str.substring(0, index) + "." + str.substring(index + 1);
看了你的代码后,似乎epascarello的方法是最好的。除了他所指出的,如果数组中没有元素,你的字符串将以"她喜欢"结尾。要解决这个问题,可以使用:
likesString = petObj.name + " is a " + petObj.type + (petObj.likes.length ? ", she likes " + petObj.likes.join(", ") : "") + ".";
开始时,您可以避免使用最后一个逗号,代码如下:
for (var i = 0; i < petArray.length; i++) {
petObj = petArray[i];
var likesString = petObj.name + " " + " is a " + petObj.type;
if (petObj.likes.length) {
likesString = likesString + " she " + " likes " petObj.likes.join(", ");
}
likesString = likesString + '.'
displayResult();
}
如果你还想使用你的代码,你必须测试vs . length-1,因为like数组的索引从0到length-1:
for (var i = 0; i < petArray.length; i++) {
petObj = petArray[i];
var likesString = petObj.name + " " + " is a " + petObj.type + " she " + " likes ";
for (var j = 0; j < petObj.likes.length; j++) {
likesString = likesString + petObj.likes[j] + ((j == petObj.likes.length-1)?'.':', ';
}
displayResult();
}
如果你仍然想在字符串构造后改变它,你可以删除最后两个字符
likesString=likesString.replace(/, $/,'.')
这是因为replace()返回一个带有新值的新字符串,而不是更改字符串本身,您可以这样做:
likesString = likesString.replace(/,s$/, ".");