我有一个我创建的字符串,我想删除最后一个逗号并用句点替换它。我想保留所有其他逗号。在这里,我试图使用条件语句,它可以添加逗号,但它不能用句点替换最后一个。我是新来的,我真的很感激任何帮助。
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();
}
答案 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$/, ".");