一段優美的正則

2021-09-01 10:35:02 字數 1690 閱讀 5883

記錄下來,一段優美的**。**於jquery,不過我是從kissy1.3原始碼中看到的。看來kissy還是大量參照了jquery啊。

**如下:

var r_xhtml_tag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig;

function create( html )

**非常簡單,作用是按照xhtml標準為需要成對出現的標籤做補全。

例如:''這樣子的字串通過通過處理後得到

作用就是這樣子。下面開始分析**。

1、正則的開始是/<,代表正則要匹配的第乙個字元時<

2、(?!area|br|col|embed|hr|img|input|link|meta|param),代表接下來的字元不匹配所列標籤名,也就是過濾掉直接關閉的標籤。

(?!pattern) 這種語法叫做負向預查,在任何不匹配pattern的字串開始處匹配查詢字串。這是乙個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如'windows (?!95|98|nt|2000)' 能匹配 "windows 3.1" 中的 "windows",但不能匹配 "windows 2000" 中的 "windows"。預查不消耗字元,也就是說,在乙個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是從包含預查的字元之後開始。

3、(([\w:]+)[^>]*),首先需要注意這裡的兩個括號是代表兩個獲取匹配。獲取的匹配結果待後續使用。由於有1,2兩點約束為前提,[\w:]能夠匹配的內容是緊跟在《號之後,切不為2中列舉的標籤的標籤名(注:\w = [a-za-z0-9_])。

[^>]*代表所有非》號字元,用於匹配標籤內的屬性。

兩段加起來就可以匹配 div width='960px'這樣子的結構了。

兩個匹配結果$1也就等於 標籤名+屬性的組合如 div width='960px' $2 等於標籤名如div

4、表示式以\/>結尾。沒什麼好解釋的

正則匹配之後另乙個需要關心的問題就是如何修改字串的問題,怎麼補全丟掉的結束標籤。

這裡利用了string.replace()的能力。

字串 string的 replace() 方法執行的是查詢並替換的操作。它將在 string中查詢與 regexp 相匹配的子字串,然後用 replacement 來替換這些子串。如果 regexp 具有全域性標誌 g,那麼 replace() 方法將替換所有匹配的子串。否則,它只替換第乙個匹配子串。

replacement 可以是字串,也可以是。如果函式它是字串,那麼每個匹配都將由字串替換。但是 replacement 中的 $ 字元具有特定的含義。如下表所示,它說明從模式匹配得到的字串將用於替換。

字元 替換文字

$1、$2、...、$99 與 regexp 中的第 1 到第 99 個子表示式相匹配的文字。

$& 與 regexp 相匹配的子串。

$` 位於匹配子串左側的文字。

$' 位於匹配子串右側的文字。

$$ 直接量符號。

這就是'<$1><' + '/$2>'的意義,把第三段匹配中儲存的第乙個結果放入開始標籤,把第二個結果放入結束標籤如$1 = div width='960px' , $2 = div 組合起來就是

瞧,是不是很棒。

end

重要的一段

2006 6 23 22 44 00 重要的一段 這幾個月都用在開發心電監護系統上了,終於告一段落,倍感輕鬆。欣慰的是,有了成果,並且成果正走在產品化路上。5月31日,孕育 設計監護儀樣機結構和pcb 6月7日,生日 pcb板製好,開始焊接和除錯 6月17日,tata,監護儀終於可以見人了。介紹一下...

一段SQL指令碼

create table gc col1 char 10 drop table gc 處理引數 declare str varchar 100 select str 1,2,3,4,5 插入處理 declare s varchar 8000 select s select replace str,u...

String擷取一段

1.若知道要從第幾個位置開始擷取,可以直接選用substring 方法 2.若不知道要從哪邊開始擷取,但是知道string中要從哪段開始,只是要中間一段字串 如 string str age 20 address sz name mason int begin str.indexof address...