2011-03-31 27 views
47

Belirli bir dizgede '_' (alt çizgi) 'nin son oluşumunu değiştirmek için jQuery'de kolay bir yol var mı?Karakterin son geçtiği yeri dize ile değiştir

+0

Her zaman dizenin son karakteri mi? Değilse, string.lastIndexOf (arama, başlangıç) – skarmats

+0

[jQuery'ye ihtiyacınız yok] 'a bakın (http://meta.stackexchange.com/questions/45176/when-is-use-jquery-not-a -Geçerli-cevap-to-a-javascript-soru). – zzzzBov

+0

olası bir kopyasının [javascript'i kullanarak bir dizede son karakterler nasıl değiştirilir] (http://stackoverflow.com/questions/3829483/how-to-replace-last-occurrence-of-characters-in-a-string "jQuery gerek yok" için –

cevap

91

Sadece normal bir ifade olan jQuery'ye ihtiyacınız yok.

var str = 'a_b_c'; 
str = str.replace(/_([^_]*)$/,'$1'); //a_bc 

Bu değişken replacement içeriğiyle değiştirecektir:

Bu

son çizgi kaldıracaktır

var str = 'a_b_c', replacement = '!'; 
str = str.replace(/_([^_]*)$/,replacement+'$1'); //a_b!c 
+1

+1 Hurtigkarl :))) – mplungjan

+2

@Martin Jespersen: Değiştirilecek metin alt çizgi değil, replaceMe adlı bir değişkenin içeriği? Normal ifade nasıl değiştirilmelidir? – Pierpaolo

+1

@Pierpaolo: "RegExp" kullanarak regexp'i oluşturmalısınız, burada hepsini okuyun: https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions - Kaçmayı unutmayın 'replaceMe' değişkeni bu nedenle düzenli ifade –

47

var pos = str.lastIndexOf('_'); 
str = str.substring(0,pos) + otherchar + str.substring(pos+1) 

son alt çizgi

değiştirmek veya olacak normal ifadeler birini kullanmak

str = str.substring(0,str.length-2)+otherchar

bir dizede geçen kömürü yerine Hayır jQuery ihtiyacı ne de düzenli ifade Birinden bir dakika içinde olsun :)

+4

+1 -using-javascript). JQuery'nin her şeyin cevabı olmadığını bilmek önemlidir.Javascript, her şeyi jquery ile zorlamak zorunda kalmadan mükemmel bir programlama dilidir. – Spudley

+1

@Spudley Çok doğru. Ancak burada SO, jQuery sürümü olmadan hiçbir JS cevabı tamamlanmaz;)) – mplungjan

+3

'+ 1 '* regex için * & ***' lastIndexOf (...) 'END ***' den arama yapar performans) şu anda kabul edilen regexp bile * daha hızlı olamaz. –

0

basit

var someString = "a_b_c"; 
var newCharacter = "+"; 

var newString = someString.substring(0, someString.lastIndexOf('_')) + newCharacter + someString.substring(someString.lastIndexOf('_')+1); 
0

Bu kod

var str="test_String_ABC"; 
 
var strReplacedWith=" and "; 
 
var currentIndex = str.lastIndexOf("_"); 
 
str = str.substring(0, currentIndex) + strReplacedWith + str.substring(currentIndex + 1, str.length); 
 

 
alert(str);

3

Peki kullanabilirsiniz tut: Burada

javascript bir dize değiştirmeye yönelik bir yazıdır bu?

function replaceLast(x, y, z){ 
    var a = x.split(""); 
    a[x.lastIndexOf(y)] = z; 
    return a.join(""); 
} 

replaceLast("Hello world!", "l", "x"); // Hello worxd! 
0

Bu mplungjan cevabı çok benzer, fakat neyse, sadece ben düşündüm (eğer hemen sonra diğer dize kullanımı yapmak gerekir ve bir dizi olarak kalmasını istiyorum özellikle) biraz daha kolay olabilir Birisi onu tercih ederse oraya koy. '-' bunu değiştirmek istiyor char veya dize ile değiştirilebilir

var str = 'a_b_c'; 
 
str = str.split(''); //['a','_','b','_','c'] 
 
str.splice(str.lastIndexOf('_'),1,'-'); //['a','_','b','-','c'] 
 
str = str.join(''); //'a_b-c'

'_' Eğer

değiştirmek istiyor Char Ve ile takas edilebilir