3

我有一个字符串,我想在其中删除最后一个逗号并将其替换为句点。我想保留所有其他逗号。在这里,我尝试使用条件语句,它可以添加逗号,但无法用句点替换最后一个。我是新手,我非常感谢任何帮助。

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

7 回答 7

3

看来你做的很辛苦!使用 Arry 的 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();
}
于 2012-12-28T21:19:32.413 回答
2

这将做到:

 str.replace(/,([^,]*)$/,".$1")

正则表达式匹配一个逗号,后跟任意数量的非逗号,一直到字符串的末尾......根据定义,这是最后一个逗号。如果没有逗号,一个逗号或任意数量的逗号,它就可以工作。

于 2012-12-28T21:17:36.557 回答
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”部分。)

于 2012-12-28T21:24:17.670 回答
1

这里是学习和测试正则表达式的好地方:RegExr

本质上,您要替换以下内容:

RegExp Pattern: /,([^,]+)$/
Replace Pattern: .$1

所以你的代码应该是这样的:

s.replace(/,([^,]+)$/, '.$1');

s您要替换最后一个逗号的字符串在哪里。

不要忘记将该行设置为变量以保存它。

于 2012-12-28T21:26:48.863 回答
1

要将字符串中最后出现的逗号替换为句点,可以使用:

var index = str.lastIndexOf(",");
var newstr = str.substring(0, index) + "." + str.substring(index + 1);

查看您的代码后,似乎 epascarello 的方法是最好的。除了他指出的,如果数组中没有元素,你的字符串会有点突然以:“she likes”结尾。要解决此问题,您可以使用:

likesString = petObj.name + " is a " + petObj.type + (petObj.likes.length ? ", she likes " + petObj.likes.join(", ") : "") + ".";
于 2012-12-28T21:15:40.707 回答
0

首先,您可以避免将最后一个逗号放在这样的代码中:

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

如果您仍想使用您的代码,则必须测试与 lenght-1 的对比,因为 likes 数组索引从 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(/, $/,'.')
于 2012-12-28T21:29:15.133 回答
-1

那是因为 replace() 返回一个带有新值的新字符串,而不是更改字符串本身,您可以这样做:

likesString = likesString.replace(/,\s$/, ".");
于 2012-12-28T21:15:50.700 回答