2013-03-12 15 views
8

Sorumu add a space between two words numaralı telefondan arıyorum.Düzenli ifadeyi kullanarak deve durum dizesinde boşluk koyma

Gereksinim: Bir deve harfli dizgiyi ayırın ve büyük harfin hemen arkasına boşluk koyun, ardından küçük bir harfle takip edilir veya hiçbir şey olmaz. Alan, büyük harflerin arasına girmemelidir.

örn: Eğer 2'den fazla kelime varsa

"LightPurple".replace(/([a-z])([A-Z])/, '$1 $2') 

, o zaman gerekir: CSVFilesAreCoolButTXT ben o

CSV Files Are Cool But TXT Ben normal Express bu şekilde sürdü bu şekilde elde etmek istediğiniz bir dizedir hepsini seçmek için g bayrağını kullanmak.

"CSVFilesAreCool".replace(/([a-zA-Z])([A-Z])([a-z])/g, '$1 $2$3') 

Ama yine de benim gereksinimleri koyduk şekilde hizmet etmez:

"LightPurpleCar".replace(/([a-z])([A-Z])/g, '$1 $2') 

o zaman onun yerine bu Regexp'i kullanmak gerekebilir CSVFile gibi kelimeler bölmek çalışıyorsanız.

+0

Son normal ifadeniz yalnızca büyük harflerle bittiğinde başarısız oluyor. Örneğin. '... AmaTXT' –

cevap

13
var rex = /([A-Z])([A-Z])([a-z])|([a-z])([A-Z])/g; 

"CSVFilesAreCoolButTXT".replace(rex, '$1$4 $2$3$5'); 
// "CSV Files Are Cool But TXT" 

Ve ayrıca

"CSVFilesAreCoolButTXTRules".replace(rex, '$1$4 $2$3$5');  
// "CSV Files Are Cool But TXT Rules" 

regex deseni ile eşleşen konu dizesinin metin vb $1, $2 ile eşleşen alt dizeleri bakınız yedek dize '$1$4 $2$3$5', yerini alacaktır desenin yakalama grupları ().

$1

ilk ([A-Z]) alt düzeni ile eşleşen alt karşılık gelir ve $3 ilk ([a-z]) alt düzeni ile eşleşen alt belirtir vb için dönüşümlü karakter |, bir maç yapmak için bir

regex ([A-Z])([A-Z])([a-z]) alt-modeli ya da ([a-z])([A-Z]) alt-modeli ile eşleşecektir, böylece bir eşleşme yapıldıysa, yakalama gruplarının birçoğu eşsiz kalacaktır. Bu yakalama gruplarına yedek dizgede başvurulabilir, ancak bunların üzerinde hiçbir etkisi yoktur - etkin bir şekilde boş bir dizeye başvururlar.

Değiştirme dizesindeki boşluk, her eşleşme yapıldığında konu dizgesine bir boşluk eklendiğinden emin olur (sondaki g bayrağı, normal ifade motoru birden fazla eşleşme arar).

+2

Tanımladığınız ifadenin açıklamasını görmeyi çok isterim, böylece okuyucular ve yeni kullanıcılar 1-2-3-4-5'lerin tümüyle tam olarak ne olduğunu bilirdi. – KMX

+0

Tamam, ilk gereksinimimde belirttiklerim için en iyi şekilde çalışıyor. Şimdi biraz daha öne sürüyorum. Yani bu iş parçacığı altında üzerinde patlatalım. Güncellemeleri oku. – KMX

+1

@KMX. Bir başkasının kabul edilmiş bir cevap için biraz kredi alma fırsatına sahip olması için yeni bir soru sormanızı tavsiye ederim. – MikeM

İlgili konular