2012-05-15 28 views
213

Dizgedeki tüm virgül değiştirin ve dize yöntemi yalnızca ilkini değişecek değiştirin:JavaScript - Birden virgül ile bir dize var

var mystring = "this,is,a,test" 
mystring.replace(",","newchar", -1) 

Sonucu: "thisnewcharis,a,test"

belgeleri gösterir varsayılanın tümünü değiştirdiği ve "-1" ifadesinin de hepsinin yerini aldığını, ancak başarısız olduğunu belirtir. Düşüncesi olan var mı?

+1

Hangi dökümanlar? Standart - http://es5.github.com/#x15.5.4.11 - üçüncü bir parametre ve MDN tanımlamıyor - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/ replace - standart olmayan bir üçüncü parametreyi, bayrakları temsil eden bir dize olarak tanımlar, tam sayı değil ... –

cevap

457

RegExp'i g bayrağıyla kullanabilirsiniz.

var mystring = "this,is,a,test" 
mystring.replace(/,/g , "newchar"); 

DEMO:http://jsfiddle.net/d4N9s/

+1

Mükemmel cevap./g, virgülle ilgili genel arama yapar ve dizgenin tamamını değiştirir. Bu şekilde çalışır, doğru muyum? –

+0

/"Seprator"/g ile ilgili ayrintili ayrintilarini açiklayabilir misiniz?/G – MSTdev

+1

@MSTdev Bu, g * flag (a.k.a. * "global search" *) ile tipik bir * normal ifade * dir. Algoritma basittir: düzenli ifade, verilen dizede tüm eşleşmeleri (burada virgüller) bulur. JavaScript'teki normal ifadeler hakkında daha fazla bilgiyi [** MDN **] 'da bulabilirsiniz (https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions#Advanced_searching_with_flags). – VisioN

29
var mystring = "this,is,a,test" 
mystring.replace(/,/g, "newchar"); 

kullanın küresel (g) bayrağı Sadece eğlence için

Simple DEMO

+0

var mystring = "this, is.a.test" mystring.replace (/./ g, ">"); Bütün dize yerine –

+0

@DineshJain In regex noktasında ('.') özel bir anlamı vardır, her karakter anlamına gelir, ve diğer tüm özel karakterlerle olduğu gibi,' '' '' değeri ile kullanmak istiyorsanız '' ile kaçması gerekir ". Sadece nokta değiştirmek isterseniz '\ .' kullanmanız gerekir. – gdoron

+0

I String.prototype.replaceAll = fonksiyonu (arama, değiştirme) {ilave \t \t \t \t \t \t \t var hedef = Bu; Target_replace (new RegExp (search, 'g'), replacement); \t \t \t \t \t}; Benim problemimi çözer @gdoron Teşekkürler –

107

:

var mystring = "this,is,a,test" 
var newchar = '|' 
mystring = mystring.split(',').join(newchar); 
+0

Değişkenler ve özel karakterlerle (ex: '[' + variable + ']') Regex ile global çalışır. Cin. –

+0

Bu iyi bir cevap, 'replace' işlevini noktalarla test ettim.'ama beklendiği gibi çalışmıyor, ama siz cevap verdiniz iyi –

+1

@SrednyMCasanova, çünkü düzenli ifadede, özel bir karakter ve ''.' ile kaçmalıyız. Örnek: 'var mystring =" Bu ......, bir test "; mystring.replace (/\./ g, "|"); 'Bkz. [MDN RegExp - Normal ifadelerde özel karakterler] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp # Special_characters_meaning_in_regular_expressions) –

İlgili konular