2013-03-12 36 views
8

我從add a space between two words開着我的問題。使用正則表達式在駱駝案件字符串中放置空格

要求:拆分駱駝案件字符串,並在緊跟大寫字母之前放置空格,後面緊跟小寫字母或可能不是空格。這個空間不應該在大寫字母之間產生。

如:CSVFilesAreCoolButTXT是一個字符串我想產生這樣說CSV Files Are Cool But TXT

我開着正規快件這樣:

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

如果你有2分以上的話,那麼你就需要使用g標誌來匹配它們。

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

如果試圖分裂樣CSVFile的話,那麼你可能需要使用這個正則表達式來代替:

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

但還是它不會成爲我已經把我的要求的方式。

+0

最後一個正則表達式只有以大寫字母結尾時纔會失敗。例如。 '... ButTXT' – 2013-03-12 19:01:25

回答

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" 

並且還

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

該正則表達式模式匹配的主題串的文本將被替換字符串'$1$4 $2$3$5',其中$1$2等指由匹配的子串被替換模式的捕獲組()

$1指的是由第一([A-Z])子圖案相匹配的子串,並$3指的是由第一([a-z])子圖案相匹配的子串等

由於交替字符|,使一個匹配的正則表達式必須匹配([A-Z])([A-Z])([a-z])子模式或([a-z])([A-Z])子模式,所以如果匹配成功,幾個捕獲組將保持不匹配。這些捕獲組可以在替換字符串中引用,但它們對它沒有影響 - 實際上,它們將引用空字符串。

替換字符串中的空格確保每次匹配時在主題字符串中插入一個空格(尾隨g標誌表示正則表達式引擎將查找多個匹配項)。

+2

我很想看到你定義的正則表達式的解釋,所以讀者和新手會知道所有這些1-2-3-4-5s究竟發生了什麼。 – KMX 2013-03-12 22:20:25

+0

好的最適合我在最初的要求中陳述的內容。現在我正在提出更多的問題。因此,讓我們在這個線程下砰的一聲。閱讀更新。 – KMX 2013-03-12 22:33:31

+1

@KMX。我建議你提出一個新問題,讓其他人有機會獲得一個可以接受的答案。 – MikeM 2013-03-12 23:08:25

相關問題