2013-03-11 71 views
1

我得到了很多的幫助,從這個的其他問題在這裏:Transform ALL CAPS to Proper Case using CSS and jQuery修改的JavaScript所以MDASH之後字母是大寫字母

但我一直在努力,所以如果在標題出現,一個MDASH修改腳本,其後的信件也將被大寫,見http://jsfiddle.net/wm5kZ/5/。而這裏的腳本:

$('ul.proper-case li a').each(function(){ 
    var ele = $(this); 
    ele.text(toProperCase(ele.text())); 
    }); 

    function toProperCase(str) 
    { 
     var noCaps = ['of','a','the','and','an','am','or','nor','but','is','if','then', 
    'else','when','at','from','by','on','off','for','in','out','to','into','with']; 
     return str.replace(/\w\S*/g, function(txt, offset){ 
      if(offset != 0 && noCaps.indexOf(txt.toLowerCase()) != -1){ 
       return txt.toLowerCase();  
      } 
      return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); 
     }); 
    } 

我一直在試圖理解正則表達式,我試圖把不同的事物爲MDASH但我不太清楚如何做到這一點。我到目前爲止沒有嘗試過任何工作。

任何人都可以幫助我知道在哪裏修改腳本來做到這一點?你能不能解釋一下它在做什麼,我可以試着理解它?非常感謝。

+1

JSYK,你可以重寫外部分作爲'$( 'ul.proper情況李一')。文本(toProperCase)'如果你改變'toProperCase'的簽名需要2個參數。 http://api.jquery.com/text/#text2 – 2013-03-11 22:23:02

+0

*「我迄今爲止所嘗試的都沒有。」* - 向我們展示您嘗試過的內容。 – Madbreaks 2013-03-11 22:25:46

+1

你應該投入一些時間和精力來學習正則表達式。不要把它當成侮辱。 – kapa 2013-03-11 22:33:39

回答

1

正則表達式/\w[^\s\u2014]*/g將做到這一點。

它將匹配後跟零個或多個(*)字符滿足這些要求的單詞字符(\w):不是(^)空白字符(\s)或十六進制的Unicode指數2014字符(\u2014) ,其中happens to be—字符。

jsFiddle Demo

+0

哦完美。那麼你能解釋一下正則表達式的含義嗎?我一直試圖\ - 在該正則表達式的不同部分,但我猜,因爲這是一個mdash你必須使用u2014?那是mdash的代碼嗎?如果不介意打破這一點,我可以理解這將是偉大的。 – Carolyn 2013-03-11 22:33:06

+0

@Carolyn我已經用解釋更新了我的答案。我對你的正則表達式做了比'\ u2014'更多的修改。 – kapa 2013-03-11 22:35:01

+0

我看到謝謝你。你怎麼在\ w之前用/開始行? – Carolyn 2013-03-11 22:41:33