Regular Expression--Good parts

匹配URL的正則表達式html

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Regular Expression</title>
<style>
</style>
</head>
<body>
<div id="content">

</div>
<script>
var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
var url = "http://www.ora.com:80/goodparts?q#fragment";
var result = parse_url.exec(url);
var names = ['url','scheme','slash','host','port','path','query','hash'];
var blanks = ' ';//7個
var i;
for(i = 0; i < names.length; i += 1){
document.writeln('<pre>' + names[i] + ":" + blanks.substring(names[i].length),result[i] + '</pre>');
}

</script>
</body>
</html>

結果:p65ajax

url:    http://www.ora.com:80/goodparts?q#fragment
scheme: http
slash:  //
host:   www.ora.com
port:   80
path:   goodparts
query:  q
hash:   fragment

一、scheme:http://www.cnblogs.com/darr/p/4490330.html正則表達式

二、pre標籤 數組

定義和用法:瀏覽器

pre 元素可定義預格式化的文本。被包圍在 pre 元素中的文本一般會保留空格和換行符。而文本也會呈現爲等寬字體。性能

<pre> 標籤的一個常見應用就是用來表示計算機的源代碼。學習

能夠致使段落斷開的標籤(例如標題、<p> 和 <address> 標籤)毫不能包含在 <pre> 所定義的塊裏。儘管有些瀏覽器會把段落結束標籤解釋爲簡單地換行,可是這種行爲在全部瀏覽器上並不都是同樣的。字體

提示和註釋:this

提示:製表符(tab)在 <pre> 標籤訂義的塊當中能夠起到應有的做用,每一個製表符佔據 8 個字符的位置。可是咱們不推薦使用它,由於在不一樣的瀏覽器中,Tab 的實現各不相同。在用 <pre> 標籤格式化的文檔段中使用空格,能夠確保文本正確的水平位置。url

提示:若是您但願使用 <pre> 標籤來定義計算機源代碼,好比 HTML 源代碼,請使用符號實體來表示特殊字符,好比 "&lt;" 表明 "<","&gt;" 表明 ">","&amp;" 表明 "&"。

提示:在 W3School 中,很是多頁面中的源代碼實例都是經過 <pre> 標籤訂義的,您能夠參考這些頁面,學習如何使用該標籤。咱們甚至把 <pre> 標籤與 <code> 標籤結合起來使用,以得到更加精確的語義。

三、用substring控制輸出格式對齊

「aa    |」

「bbb  |」

blanks = "  ";//相同的總長度

a + blanks.substring(a.length)

四、exec()

該方法是專門爲捕獲組設計的。返回數組或null。(p106高)

數組:第一項是與整個模式匹配的字符串。

         其餘項是與模式中的捕獲組匹配的字符串。

五、非捕獲型分組

(?:...)表示一個非捕獲型分組。

 一般用非捕獲分組來替代少許不優美的捕獲型分組是不多的方法,由於捕獲會有性能上的損失。 ??

  通常的分組()即括號中沒有?:的使用時regexp對象都會將分組內匹配到的內容記錄下來。
  RegExp.$1--RegExp.$9,分別用於存儲9個匹配的捕獲組。
var text = "this has been a short summer";
var pattern = /(..)or(.)/g;
pattern.test(text);
alert(RegExp.$1)//sh

var pattern2 = /(?:..)or(.)/g;
pattern2.test(text);
alert(RegExp.$1);//t

六、test()

  在只想知道目標字符串與某個模式是否匹配,但不須要知道其文本內容的狀況下,使用這個方法很是方便。所以,test()方法常常被用在if語句中。

   (test方法是使用正則表達式的最簡單(和最快)的方法。不要對這個方法使用g標識)

   由於會出問題:

var pattern1 = /.at/gi
pattern1.test("aaaaat")//true pattern1.lastIndex 6
pattern1.test("aaaaatffff")//false

[在建立正則表達式對象時若是使用了「g」標識符或者設置它了的global屬性值爲ture時,那麼新建立的正則表達式對象將使用模式對要將要匹配的字符串進行全局匹配。在全局匹配模式下能夠對指定要查找的字符串執行屢次匹配。每次匹配使用當前正則對象的lastIndex屬性的值做爲在目標字符串中開始查找的起始位置。lastIndex屬性的初始值爲0,找到匹配的項後lastIndex的值被重置爲匹配內容的下一個字符在字符串中的位置索引,用來標識下次執行匹配時開始查找的位置。若是找不到匹配的項lastIndex的值會被設置爲0。當沒有設置正則對象的全局匹配標誌時lastIndex屬性的值始終爲0,每次執行匹配僅查找字符串中第一個匹配的項。能夠通下面的代碼來查看在執行匹配相應的lastIndex 屬性的值。(http://www.111cn.net/wy/js-ajax/45139.htm)]

 

匹配數字的正則表達式

var parse_number = /^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;
parse_number.test("1");//true
parse_number.test("2E+2")//true

咱們的模式中惟一可能出現的字母是e,咱們用了標識符i。匹配e或E。

 1/^$/i

  咱們用^和$來框定這個正則表達式。它指引這個正則表達式對文本中的全部字符都進行匹配。若是省略了這些標識,那麼只要一個字符串包含一個數字,這個正則表達式就會進行匹配。有了這些標識,只有當一個字符串的內容僅爲一個數字時,它纔會告訴咱們。

2.正則表達式的量詞

 

正則表達式中量詞有下面六種:

 

?表示0次或1次

 

* 表示0次或0次以上

 

+ 表示1次活1次以上

 

{n} 表示正好n次

 

{n,m} 表示n-m次

 

{n,}表示n次以上

若是隻有一個量詞,表示趨向於貪婪性匹配,即匹配儘量多的副本直至達到上限。

若是這個量詞附加?,則表示趨向於進行非貪婪匹配,即只匹配必要的副本。

通常狀況下最好堅持使用貪婪性匹配。

相關文章
相關標籤/搜索