2011-03-19 24 views
41

Bir alanın HTML verileriyle Dize içerdiği veri tabanından veri alıyorum. jQueryiçin kullanılabilecek tüm çift tırnakları değiştirmek istiyorum.Dize içindeki tüm çift tırnak işaretlerini değiştirin

details.replaceAll("\"","\\\""); 
    //details.replaceAll("\"","&quote;"); details.replaceAll("\"","&#34"); 

arkadaşları lthis yolu denediniz ama sonuç dizesini değişikliği göstermez .. kullanıyorum tırnak yerine çalışıyorum java kullanma. O'reily makaledeapache dizesi araçlarını belirtir. Başka bir yolu var mı?

Herhangi bir regex falan mı?

cevap

76

Burada dizeleri immutable olduğunu nasıl

String details = "Hello \"world\"!"; 
details = details.replace("\"","\\\""); 
System.out.println(details);    // Hello \"world\"! 

Not var basitçe details.replace("\"","\\\"") yapmak böylece yeterli değildir. details değişkenini sonuçtaki dizeye yeniden atamanız gerekir.

details = details.replaceAll("\"","&quote;"); 

yerine,

Hello &quote;world&quote;! 
5

Bu durumda bir normal ifadenin aşırı derecede fazla olduğunu düşünüyorum. Eğer sadece dizede tüm tırnak kaldırmak isterseniz ben bu kodu kullanırsınız:

details = details.replace("\"", ""); 
4

sonuçları bu JSON çalışmasını sağlamak için kullanma


, bundan daha birkaç karakter kaçmak gerekir. Bunu ayrıştırmak için json2.js kullanabilmek için isterseniz

myString.replace("\\", "\\\\") 
    .replace("\"", "\\\"") 
    .replace("\r", "\\r") 
    .replace("\n", "\\n") 

ve sonra da JSON tırnaklı dizge içinde verir

.replace("\u2028", "\\u2028") 
    .replace("\u2029", "\\u2029") 

kaçmak gerekir, ancak hangi JavaScript değildir. yedek String

.replaceAll("\"","\\\\\"") 

BEŞ ters eğik çizgi:

+0

jquery 1.5 kullanıyorum .. Bunlara ihtiyacım var mı? – MalTec

+0

@MalTec, Dizeniniz ters eğik çizgi içeriyorsa, o zaman evet. Dizginiz '' \\ '' 'ise düşünün. Eğer tırnak içine koyarsanız ve sadece alıntılardan kaçarsanız, o zaman geçersiz bir dize olan' \\ "" 'demektir. Diziniz yeni satırlar içeriyorsa, bunlardan da kurtulmanız gerekir. JQuery'deki dizeler içinde yeni satırlara izin verilmez. –

24

olmak zorunda olmaz o.

+4

Evet, 'replaceAll() 'işlevini kullanacak olsaydınız, bu doğru yol olurdu. Bu yüzden herkes bunun yerine 'replace()' kullanacağını söylüyor. ;) –

+0

Sadece bir saatin daha iyi kısmını, 'replaceAll()' ın neden çalışmadığını anlatarak geçirdim. Tamamen bir 'replace()' yöntemi olduğu unutuldu. – Ben

+3

Neden replaceAll() kullanarak replace() ancak 5 ters eğik çizgiyi kullanarak 3 ters eğik çizgi oluyor? – Ida

3

Cevabın burada zaten kabul edildiğini biliyorum, ancak çift tırnak ve tek tırnaklardan kaçmaya çalışırken bulduğum şeyi paylaşmak istedim. ve bu işleri :)

çift tırnak kaçmayı:

if(string.contains("\"")) { 
     string = string.replaceAll("\"", "\\\\\""); 
    } 

ve tek tırnak kaçmayı:

if(string.contains("\'")) { 
     string = string.replaceAll("\'", "\\\\'"); 
    } 

PS İşte

Yaptığım budur: Lütfen yukarıda kullanılan ters eğik çizgi sayısını unutmayın.

2

Bu, bir dizgede çift tırnak işaretini kaldırmaktır.

str1 = str.replace(/"/g, ""); 
alert(str1); 
+0

OP, Java için bir cevap istedi. –

0

aşağıdaki regex ikisi için çalışacaktır: * dize için

text = text.replaceAll("('|\")", "\\\\$1"); 
İlgili konular