2012-12-19 64 views
9

我有一個如下所示的字符串:「Doe,John,A」(姓,名,中間名)。正則表達式替換所有逗號的值

我想寫一個正則表達式,將字符串轉換爲「Doe * John * A」。

但是,我必須考慮這個字符串的所有空格,所以「Doe,John,A」仍然會轉換爲「Doe * John * A」。

此外,字符串「Doe John A」應該轉換爲「Doe * John * A」。

我開始寫這個,但我認爲我卡在空間&用戶不提供逗號的可能性。

這是我有:

var myString = "John, Doe, A"; 
var myOtherString = "John Doe A"; 


var myFunction = function (aString) { 
     aString = aString.replace(", ", "*"); 
     aString = aString.replace(", ", "*"); 

return aString; 

}; 

這些應該都返回"Doe*John*A"

我想我在這個功能上重複了太多。我也沒有考慮到不提供逗號的可能性。

有沒有更好的方法來做到這一點?

回答

14

是的,有。改用replace函數和正則表達式。這有幾個優點。首先,你不必再打兩次了。其次,它真的很容易佔的空間任意數量和可選的逗號:

aString = aString.replace(/[ ]*,[ ]*|[ ]+/g, '*'); 

注意周圍的空間的方括號是可選的,但我覺得他們做的空格字符更容易閱讀。如果你想允許/刪除任何類型的空白有(標籤和換行符,太)的,使用\s代替:

aString = aString.replace(/\s*,\s*|\s+,/g, '*'); 

注意,在這兩種情況下,我們不能簡單地做出逗號可選,因爲這將允許以零-width匹配,這將在字符串中的每個位置引入一個*。 (感謝CruorVult指出這一點)

+0

' 「李四,約翰,A」 .replace(/ \ S * \ S * /克,「 *'); //「* D * o * e ** J * o * h * n ** A *」' – CruorVult

+0

@CruorVult cheers,fixed –

+0

如果我想用短劃線替換* s怎麼辦?我只是將其改爲 'aString = aString.replace(/ [] *,[] * | [] +/g,' - '); ' - 感謝有用的答案,順便說一句。 – Jeff

2

String.replace只替換第一次出現。要全部替換它們,請爲「全局」添加「g」標誌。您還可以使用字符組和+操作符(一個或多個)來匹配字符鏈:

aString.replace("[,\s]+", "*", "g"); 

這將取代逗號和空格的所有連鎖與*

+2

再次,這不是如何寫正則表達式,以及如何應用修飾符javascript –

1

試試這個刪除所有空格和逗號,然後用*替換。

Myname= myname.replace(/[,\s]/,"*")

Editted作爲去除從圖案 '至少兩個項目'。但至少要有物品。

Myname= myname.replace(/([,\s]{1,})/,"*")

Reference: on Rublar。然而,以m爲單位的正則表達式更好。巴特納:)

+0

@ m.buettner感謝您發出循環漏洞:) – bonCodigo

+0

您應該將其設置爲「至少一個項目」。現在你會得到很多'*',因爲你之前有空格和逗號 –

+0

@ m.buettner在這裏,我累了[rublar] – bonCodigo

5

如果要更換所有非單詞字符試試這個:

str.replace(/\W+/g, '*'); 
相關問題