2012-12-28 86 views
3

我有一個字符串,我已經創建了我想要刪除最後一個逗號並將其替換爲句點的字符串。我想保留所有其他逗號。在這裏,我試圖使用條件語句,它可以用來添加逗號,但是它不能用句點替換最後一個。我是新來的,我非常感謝任何幫助。如何刪除逗號並替換爲一段時間javascript

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

我回答,但後來發現了這一點。幾乎完全重複的[如何替換最後...](http://stackoverflow.com/questions/3829483/how-to-replace-last-occurrence-of-characters-in-a-string-using-javascript )答案將是相同的。 – bdrelling

+0

@aerodynamo該文章只涉及如何修復字符串創建後,也許通過一個簡單的join()調用。這裏的部分問題是循環內部的條件是錯誤的,其他條件不需要,'替換'的結果不會放回到字符串中,並且有一個備用' var',如果你把逗號放在所有的循環迭代中,你應該在循環結束後放置fixup,而不是'last'循環迭代的條件。 –

+0

@LeeMeador嗯......我明白你的意思了,但最重要的答案(以及後面的大部分答案)都展示瞭如何用不同的模式替換最後一次出現的特定模式。我的意思是,除了檢查空白之外,它幾乎完全相同。如果您拿出\並將'和'更改爲'。',則答案完全相同。我同意他的代碼還存在其他問題,但與他提出的問題沒有直接關係。思考? – bdrelling

回答

1

請注意,「如果」的這部分總是真的那麼永遠不會執行的「其他」部分:

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] + ". "; 
    } 
} 

有更好的方法來做到這一點不重複了這麼多,但可能會做你想要的狀態。 (我也定了額外的「變種」的一部分。)

+0

非常感謝!我很感激。正如我所說,我仍然在學習這一點,所以通常我的代碼並不像它那樣精益求精。關於if語句如何工作的提醒對我來說很有幫助。 – user1876829

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

如果字符串沒有逗號,這將不起作用。 – Dancrumb

+0

如果'likes'數組中沒有條目,則不會有逗號。 –

+0

@LeeMeador這是沒有意義的,因爲字符串最終會變成'「X是y,她喜歡。不過,我已經添加了代碼來涵蓋這個邊緣案例。 –

-1

這是因爲更換()返回一個具有新值的新字符串,而不是改變字符串本身的,你可以這樣做,而不是:

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

-1:這將替換第一個逗號,而不是最後一個 – Dancrumb

+1

嗯......這將只替換從字符串中找到的第一個逗號。 – Teemu

+0

是的,沒錯。我的錯。現在修復它。 –

2

這將做到這一點:

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

正則表達式上一個逗號,後跟任意數量的非逗號一路定義字符串...結束比賽,這是最後一個逗號。它適用於沒有逗號,逗號或逗號的情況。

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

這裏是學習和測試正則表達式的好地方:RegExr

本質上講,你要替換的以下內容:

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

所以你的代碼應該是這樣:

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

哪裏s是你要替換最後一個逗號的字符串

不要忘記將該行設置爲一個變量來保存它。

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作爲喜歡數組索引從去0〜長度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(/, $/,'.') 
+0

你說長度1,但沒有把它放在'如果'的條件更正的代碼。 「其他」條件根本不需要。 –

+0

@LeeMeador你是對的,我瀏覽了代碼(這是快速閱讀的術語),並假定它與寫入的內容不同。修正了它(第一個腳本也)。 – Eineki