国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

MooTools教程(13):正則表達式

2024-07-21 02:04:24
字體:
來源:轉載
供稿:網友

今天我們將先簡要地看一下正則表達式,然后再看一下mootools提供的一些讓正則表達式更容易使用的功能。如果你還不熟悉怎么使用正則表達式(regular expression(regex)),我強烈建議你花一定量的時間好好看一下這篇文章中的一些鏈接,尤其是文章結尾“更多學習”部分的鏈接。我們今天只是講一講正則表達式最基本的用法,正則表達式能做的遠遠超過我們今天所講的內容。

基本用法

test()方法

它的簡單在于,一個正則表達式可以是一個你想要匹配的簡單字符串。盡管javascript本身已經為regexp對象提供了它自己的test()方法,mootools的test()方法更好用一些,在javascript中使用正則表達式也更輕松一些。

對于初學者,我們先看一下test()方法最簡單的用法,在一個大的字符串中查找特定的字符串:

參考代碼: [復制代碼] [保存代碼]
  1. // 我們要在這個字符串中查找
  2. var string_to_test = "match anything in here";
  3.  
  4. // 我們要查找的正則表達式
  5. var regular_expression = "anything";
  6.  
  7. // 應用正則表達式,返回true或者false
  8. var result = string_to_test.test(regular_expression);
  9.  
  10. // result現在為true

這和contains()函數的行為基本類似,不過contains是按照完整的單詞查找,而正則表達式匹配任何它出現的地方。舉個例子,在下面的這個實例中,contains()方法將不返回true,而test()方法將返回true:

參考代碼: [復制代碼] [保存代碼]
  1. var string_to_match = "anything";
  2.  
  3. // 返回false
  4. string_to_match.contains('nything')
  5.  
  6. // 返回true
  7. string_to_match.test('nything');

另外要注意的是,除非你明確指定,正則表達式是大小寫敏感的(區分大小寫),因此你在一個包含“match”的字符串中查找“match”將返回false。你可以在下面的例子中試一試:

參考代碼: [復制代碼] [保存代碼]
  1. var regex_demo = function(){
  2.     var test_string = $('regex_1_value').get('value');
  3.     var regex_value = $('regex_1_match').get('value');
  4.     var test_result = test_string.test(regex_value);
  5.  
  6.     if(test_result){
  7.         $('regex_1_result').set('html'"matched");
  8.     }
  9.     else {
  10.         $('regex_1_result').set('html'"didn't match");
  11.     }
  12. }

注意,在正則表達式中有一些特殊字符,你需要小心使用。如果你把這些字符中的任何一個輸入到下面的正則表達式文本框中將會產生錯誤,這個時候你需要刷新這個頁面才能繼續下面的演示例子。

- . * + ? ^ $ { } ( ) | [ ] / /

要測試的字符串:
正則表達式
 

忽略大小寫

在很多情況下,你不需要關心你要匹配的項的大小寫。如果你不想要一個正則表達式對大小寫敏感,你可以在調用test()方法時添加一個參數“i”:

參考代碼: [復制代碼] [保存代碼]
  1. // 我們要在這個字符串中查找
  2. var string_to_test = "ignore case";
  3.  
  4. // 返回false
  5. string_to_test.test("ignore");
  6.  
  7. // 返回true
  8. string_to_test.test("ignore""i");

從技術上講,你可以傳遞多個參數給test()方法,但是由于javascript現在僅僅只支持3個正則表達式參數(其中2個在test()方法中默認啟用),這個期間內你可能僅僅只能使用參數“i”。你可以繼續測試一下大小寫匹配的不同:

參考代碼: [復制代碼] [保存代碼]
  1. var regex_demo = function(){
  2.     // 從輸入文本框中得到要測試的字符串
  3.     var test_string = $('regex_2_value').get('value');
  4.  
  5.     // 從輸入文本框中得到正則表達式
  6.     var regex_value = $('regex_2_match').get('value');
  7.  
  8.     // 如果我們需要忽略大小寫
  9.     var regex_param = "";
  10.     if ($('regex_2_param').checked){
  11.         regex_param = "i";
  12.     }
  13.  
  14.     // 運行test()方法并得到結果
  15.     var test_result = test_string.test(regex_value, regex_param);
  16.  
  17.     // 更新結果顯示區域
  18.     if (test_result){
  19.         $('regex_2_result').set('html'"matched");
  20.     }
  21.     else {
  22.         $('regex_2_result').set('html'"didn't match");
  23.     }
  24. }

要測試的字符串:
正則表達式
忽略大小寫
 

有趣的事情

現在我們已經學會了簡單的匹配,我們可以開始看一下正則表達式更令人印象深刻的一些方面。這里不會涵蓋一切可能與正則表達式相關的東西——我們將挑選一些更直接更有用的功能。

使用^從字符串開始匹配

正則表達式的“^”運算符允許你在一行字符串的開頭匹配,而不管字符的后面有沒有相應的匹配。把它放在你要匹配的正則表達式的開頭,就像下面這樣:

參考代碼: [復制代碼] [保存代碼]
  1. // 我們要測試的字符串
  2. var string_to_test = "lets match at the beginning"
  3.  
  4. // 測試這個字符串是不是以lets開頭,返回true
  5. var is_true = string_to_test.match("^lets");
  6. 和你期待的一樣,如果這個表達式不是在字符串的開頭,這個測試將返回false:
  7. // 我們要測試的字符串
  8. var string_to_test = "lets match at the beginning";
  9.  
  10. // 測試這個字符串是不是以match開頭,返回false
  11. var is_false = string_to_test.match("^match");

繼續測試下面的:

要測試的字符串:
正則表達式
忽略大小寫
 

使用$匹配字符串的結尾

“$”運算符的功能和“^”的功能類似,但是有兩點不一樣:

  • 它匹配一個字符串的結尾而不是開頭
  • 它放在正則表達式的結尾而不是開頭

除此之外,它的所有功能和你期待的一樣:

參考代碼: [復制代碼] [保存代碼]
  1. // 我們要測試的字符串
  2. var string_to_test = "lets match at the end";
  3.  
  4. // 測試這個字符串是不是以end結尾,返回true
  5. var is_true = string_to_test.match("end$");
  6.  
  7. // 測試這個字符串是不是以the結尾,返回false
  8. var is_false = string_to_test.match("the$");

通過聯合使用這兩個運算符,你可以做一個很干凈的測試:你可以檢查一個字符串是不是只包含你要匹配的表達式內容而沒有任何其他東西。

參考代碼: [復制代碼] [保存代碼]
  1. // 我們要測試的字符串
  2. var string_to_test = "lets match everything";
  3.  
  4. // 測試這個字符串是不是完全和"lets match everything"一樣,返回true
  5. var is_true = string_to_test.match("^lets match everything$");
  6.  
  7. // 測試這個字符串是不是完全和"lets everything"一樣,返回false
  8. var is_false = string_to_test.match("^lets everything$");

要測試的字符串:
正則表達式
忽略大小寫
 

字符集

字符集是另外一個正則表達式工具,可以允許你匹配多個特定的字符(a或者z),以及一系列的字符(a到z)。據個例子,如果你想測試一個字符串中是否包含單詞moo或者boo,通過字符集,你可以在一個正則表達式的方括號[]內放置這兩個字符來實現:

參考代碼: [復制代碼] [保存代碼]
  1. // 測試moo用的字符串
  2. var first_string_to_test = "cows go moo";
  3.  
  4. // 測試boo用的字符串
  5. var second_string_to_test = "ghosts go boo";
  6.  
  7. // 這匹配第一個字符串而不匹配第二個字符串
  8. var returns_true = first_string_to_test.test("moo");
  9. var returns_false = second_string_to_test("moo");
  10.  
  11. // 這匹配第二個字符串而不匹配第一個字符串
  12. returns_false = first_string_to_test.test("boo");
  13. returns_true = second_string_to_test.test("boo")
  14.  
  15. // 這同時匹配第一個和第二個字符串
  16. returns_true = first_string_to_test("[mb]oo");
  17. returns_true = second_string_to_test("[mb]oo");

要測試的字符串一: 
要測試的字符串二: 
正則表達式
忽略大小寫

為了匹配一系列的字符,你可以單獨拿出這一系列字符的開頭一個字符和最后一個字符,然后把它們用一個連接符(-)連接起來。你可以通過這種方式定義一系列的數字或者字符:

參考代碼: [復制代碼] [保存代碼]
  1. var string_to_test  = " b or 3";
  2. // 匹配a, b, c, 或者d,返回true
  3. string_to_test.test("[a-d]");
  4.  
  5. // 匹配1, 2, 3, 4, 或者5. 返回 true.
  6. string_to_test.test("[1-5]");

如果你想在多個字符集中匹配,你可以把你的字符集放在一個方括號[]中,然后用“|”運算符隔開。

參考代碼: [復制代碼] [保存代碼]
  1. var string_to_test = "b or 3";
  2. // 匹配a到d或者1到5,返回true
  3. string_to_test.test([ [a-d] | [1-5] ]);

要測試的字符串一: 
要測試的字符串二: 
正則表達式
忽略大小寫

escaperegexp()方法

當你看到正則表達式建立的方法時,你可能覺得要匹配一些特殊字符非常的困難。舉個實際的例子,如果你要在一個字符串中查找“[stuff-in-here]”或者“$300”時怎么辦?你可以通過手動地在每個你要忽略的特殊字符前面添加‘/’來實現。

參考代碼: [復制代碼] [保存代碼]
  1. // 我們要匹配的字符串,注意[、]、-和$
  2. var string_to_match = "[stuff-in-here] or $300";
  3.  
  4. // 不正確的匹配方式
  5. string_to_match.test("[stuff-in-here]");
  6. string_to_match.test("$300");
  7.  
  8. // 正確的匹配方式
  9. // 注意[、]、-和$前面的/
  10. string_to_match.test("/[stuff/-in/-here/]");
  11. string_to_match.test("/$300");

這往往是處理正則表達式頭痛的地方,尤其是你對它們沒有完全熟悉的時候。作為參考,正則表達式中需要轉義的特殊字符包括:

- . * + ? ^ $ { } ( ) | [ ] / /

幸運的是,mootools提供了escaperegexp()函數,可以確保你的正則表達式被正確地轉義。這是另外一個字符串函數,因此你只需要在你開始查找之前,在你要匹配的正則表達式字符串上調用這個方法就行了。

參考代碼: [復制代碼] [保存代碼]
  1. // 我們要轉義的字符串
  2. var unescaped_regex_string = "[stuff-in-here]";
  3.  
  4. // 轉義這個字符串
  5. var escaped_regex_string = unescaped_regex_string.escaperegexp();
  6.  
  7. // 轉義后的字符串是 "/[stuff/-in/-here/]"

注意,這意味著你要在正則表達式中使用的任何特殊字符都必須在轉義之后再添加上去:

參考代碼: [復制代碼] [保存代碼]
  1. // 需要轉義的字符串
  2. var unescaped_regex_string = "[stuff-in-here]“;
  3. // 轉義這個字符串,從開頭匹配
  4. var escaped_regex_string = “^” + unescaped_regex_string.escaperegexp();
  5. // escaped_regex_string現在就是“^/[stuff/-in/-here/]”

繼續在下面的例子中測試使用escaperegexp()和不使用的區別:

參考代碼: [復制代碼] [保存代碼]
  1. var regex_demo = function(){
  2.     // 獲取要測試的字符串
  3.     var test_string_1 = $('regex_7_value_1').get('value');
  4.  
  5.     // 獲取要使用的正則表達式
  6.     var regex_value = $('regex_7_match').get('value');
  7.  
  8.     // 檢查我們是不是要轉義正則表達式
  9.     if ($('regex_7_escape').checked){
  10.         // 如果是的,我們則進行轉義
  11.         regex_value = regex_value.escaperegexp();
  12.     }
  13.  
  14.     // 檢查一下我們是不是要忽略大小寫
  15.     var regex_param = "";
  16.     if ($('regex_7_param').checked){
  17.         regex_param = "i";
  18.     }
  19.  
  20.     // 運行測試
  21.     var test_result_1 = test_string_1.test(regex_value, regex_param);
  22.     if (test_result_1){
  23.         $('regex_7_result_1').set('html'"matched");
  24.     }
  25.     else {
  26.         $('regex_7_result_1').set('html'"didn't match");
  27.     }
  28. }

要測試的字符串一: 
正則表達式
對正則進行轉義
忽略大小寫

記住,你可能因為使用了沒有轉義的特殊字符而使演示例子不能正常運行,因此當示例不能運行的時候請不要感到奇怪,因為你一直都在玩這些東西。

更多學習

下載一個包含你開始所需要的所有東西的zip包

regular-expressions.info是一個很好的參考和學習的地方——一個值得花一些時間瀏覽的網站。對于那些熟悉perl或者熟悉各種語言差異的人,robert的perl教程中的關于正則表達式這一節則對一些基本概念解釋得非常的好。同樣,stephen ramsay已經寫了一個關于unix正則表達式的教程,用一種非常清楚和直接了當的方式講解了其中的一些概念。

另外一個不錯的地方是正則表達式庫,它們有數不清的正則表達式例子來完成各種各樣的常見任務。最后,如果你有勇氣,你應該花一些時間來看一下mozilla的javascript正則表達式參考手冊。這可能非常的多,但是極其有用。如果你想看一下mootools這邊關于正則的內容,可以看一下test()函數的文檔。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安顺市| 邻水| 娄底市| 黄梅县| 林州市| 九江市| 乐平市| 航空| 东至县| 筠连县| 井陉县| 赫章县| 五华县| 四平市| 曲麻莱县| 沂南县| 册亨县| 东兰县| 威海市| 芦溪县| 清新县| 昭通市| 廊坊市| 沁源县| 新宁县| 祁阳县| 阿勒泰市| 花垣县| 镇赉县| 富川| 芮城县| 龙岩市| 莲花县| 昔阳县| 永泰县| 庆城县| 大田县| 文安县| 靖远县| 罗源县| 靖西县|