如何删除逗号并用句点javascript替换

时间:2012-12-28 21:12:12

标签: javascript arrays string object conditional-statements

我有一个我创建的字符串,我想删除最后一个逗号并用句点替换它。我想保留所有其他逗号。在这里,我试图使用条件语句,它可以添加逗号,但它不能用句点替换最后一个。我是新来的,我真的很感激任何帮助。

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

7 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:2)

这样做:

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

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

答案 2 :(得分:1)

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

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(", ") : "") + ".";

答案 3 :(得分:1)

请注意,此处的“if”部分必须始终为true,因此“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'部分。)

答案 4 :(得分:1)

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

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

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

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

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

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

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

答案 5 :(得分: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,因为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(/, $/,'.')

答案 6 :(得分:-1)

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

likesString = likesString.replace(/,\s$/, ".");