javascriptRegex複習

來源:互聯網
上載者:User
文章目錄
  • javascript的Regex複習
javascript的Regex複習參考資源:

w3cschool javascript regexp
菜鳥吧 javascriptRegex

這裡主要記錄幾個自己之前不是很熟悉的知識點,其他的知識點,上面兩個網站中已有詳細的參考

關於反向引用
// 測試函數function matchReg(reg, str) {var result = str.match(reg);if(result) {console.dir(result);} else {console.log('match failed');}}var reg = /([A-Za-z]{0,6})\1/;var str = 'AndrewAndrew';// 測試通過matchReg(reg, str); //通過(?:pattern)的方式,不記錄子運算式匹配的內容(本例中為Andrew)//所以\1對子運算式匹配內容的引用失敗了//注意:這裡強調的是子運算式所匹配的內容,而不是子運算式本身reg = /(?:[a-zA-Z]{0,6})\1/;// 測試不通過 matchReg(reg, str); 
關於子運算式的定義
var parse_number = /^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;

這是一個解析數位Regex,其中的子運算式有(?:\.\d*)和(?:e[+\-]?\d+)

\.和\-分別是對.和-的轉義表達

順便複習下.表示除分行符號以外的其他字元

-一般用於[a-zA-Z0-9]表示匹配範圍

如果其中沒?:例如(\.\d*)那麼按照先後順序,反向引用的關係如下

  • \1-->(\.\d*)
  • \2-->(e[+\-]?\d+)

如果有更多的話,就以此類推\3 \4 \5....

再次強調,引用的是子運算式匹配的內容,是具體的文本

關於正向預查
var reg = /I like (?=shanghai)/;var str = 'I like shanghai';matchReg(reg, str); //測試通過str = 'I like beijing';matchReg(reg, str); //不通過

跑下上面的代碼,就馬上理解什麼算是正向預查了,如上面的例子,通過(?=pattern)的形式,正則
運算式預測下後面的內容是不是符合要求,如果是那就順利匹配.

相對地,(?!=pattern)的使用意圖正好與(?=pattern)相反,就不複述了

關於貪心和非貪心匹配模式
// 貪心var reg = /\d{1,}/;var str = '1999';matchReg(reg, str); // result[0]為1999   能多匹配就多匹配// 非貪心reg = /\d{1,}?/;matchReg(reg, str); // result[0]為1   只匹配了一個

從上面的結果很容易看出"貪心"和"非貪心"的含義

pattern?這就表明非貪心匹配模式,一般情況就是貪心的

關於Regexp對象exec函數返回的結果
// 關於返回結果是個什麼// matchReg函數中console.dir(result)能說明問題,firebug中一看便知
關於string的replace函數
function camelize(str) {return str.replace(/-(\w)/g, function(inputStr, p1) {console.log(p1);return p1.toUpperCase();});}console.log(camelize('background-color'));function uncamelize(str, sep) {sep = sep || '-';return str.replace(/([a-z])([A-Z])/g, function(inputStr, p1, p2) {console.log('p1:%s, p2:%s', p1, p2);return p1 + sep + p2;});}console.log(uncamelize('backgroundColor', '-'));

上面兩個例子,主要用於說明replace函數的用法,當然還有search,split等函數可以充分利用Regex的優勢

關於javascriptRegex的最佳實務

就一句話:盡量的精簡,不要複雜,利於讀懂和維護!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.