JavaScript正則表達式的用法
- 正則表達式是一種可以用於模式匹配和替換的強大工具,在很多語言中都可以應用。JavaScript對正則表達式提供了很好的支持, Javascript中有一個正則表達式對象RegExp。該對象提供了大量的屬性和方法來處理正則表達式,同時,String對象也提供了相關的方法來 處理正則表達式,在Web應用中,經常使用正則表達式來驗證用戶輸入的信息,例如在用戶註冊過程中,驗證輸入的Email地址是否合法。以下我們就介紹一 下正則表達式的基本用法。
JavaScript正則表達式的基本用法
- 正則表達式的作用主要有三:
-
- 驗證數字是否符合特定模式;
- 利用正則表達式找到特定文本而後刪除或者替換文本;
- 按模式匹配在字符串中查找查找匹配子字符串。
- Javascript中使用正則表達式的方法有二:
- 一是使用RegExp對象
-
- 其基本語法爲:var rx=new RegExp(pattern[,flags]); ,其中參數pattern是一個字符串,表示要使用的正則表達式模式,參數flag爲一個可選的字符串,表示如何應用模式的標誌,多種標誌可以組合使用。
- 主要有三種模:g;全文查找出現的所有模式;i:忽略大小寫;m:多行查找;
- 二是使用正則表達式直接量 var rx=/pattern/flags;
-
- pattern表示使用的正則表達式模式,flag如何應用的標記同上;
- 模式字符串組成
-
- 正則表達式就是有普通字符以及特殊字符(稱爲元字符)組成的文字模式。元字符前面的字符稱爲前導符,元字符按功能又分爲限定符、定位符等類別,下面對常用的元字符進行列表說明。
常見元字符 | |
元字符 | 說明 |
/s | 匹配單個空格,包括tab鍵和換行符 |
/S | 匹配出單個空格符之外的所有字符,/S與/s互爲逆運算 |
/d | 匹配從0~9的數字 |
/w | 匹配字母,數字或者下劃線字符 |
/W | 匹配所有與/w不匹配的字符,/W與/s互爲逆運算 |
/cx | 匹配由x指明的控制字符。例如,/cZ匹配一個Control-Z。x的值必須爲A~Z或者a~z之一。否則,將c視爲一個願意的'c'字符 |
/f | 匹配一個換頁符,等價與/x0c和/cL |
/n | 匹配一個換行符,等價於/x0a和/cJ |
/r | 匹配一個回車符,等價於/x0d和/cM |
/t | 匹配一個製表符,等價於/x09和/cI |
/v | 匹配一個垂直製表符。等價於/x0b和/cK |
. | 用於匹配除換行符之外的所有字符 |
限定符說明 | |
限定符 | 說明 |
* | 匹配前導字符出現零次或者多次 |
+ | 匹配前導字符出現一次或者多次 |
? | 匹配前導字符出現零次或者一次 |
{n} | 匹配前導字符出現n次,n>=0; |
{n,} | 匹配前導字符至少出現n次,n>=0; |
{n,m} | 匹配前導字符至少出現n次,最多出現m次;m>n>=0; |
定位符說明 | |
定位符 | 說明 |
^ | 匹配模式必須出現在目標字符串開頭 |
$ | 匹配模式必須出現在目標的結尾 |
/b | 匹配模式必須出現在目標字符串的開頭或者結尾的兩個邊界之一 |
/B | 匹配對象必須位於目標字符串的開頭和結尾的兩個邊界之內,即匹配對象既不能作爲目標字符串的開頭,也不能作爲目標字符串的結尾 |
- 正則表達式匹配模式的範圍指定符
-
- []限定的模式指定了其中一個字符的出現的可能。如/[A-Z]/表示匹配從A到Z的任何一個字符;/[A-Za-z]/表示匹配從A到Z或者從a-z的任何一個字符;
- ()限定的模式指定()裏包含的內容必須同時出現在對象中。如/(abc)[0-9]/意思是目標字符串中出現的abc1,abc2...abc9中9箇中的任何一個,而不是ab1,a2等;
- “|”類似於邏輯運算中的“或”運算,如:/sb|sbb|6/表示與目標對象中的"sb","sbb","6"中任何一個相匹配;
- 當^符出現在[]中時,表示取否定運算。如:/[^A-G]/表示與目標對象中除了A-G之外的字符相匹配;
- 字符轉義與優先級順序
-
在匹配模式需要使用元字符時,需要使用轉移字符“/+元字符”表示,如查找“12*”模式,我們可以使用/12/*/表示;構造玩正則表達式以後,就可以像使用數學表達式一樣來求值。正則表達式在匹配過程中是按照從左向右的順序進行的,其操作符具有一定的優先級順序
優先級順序 | ||
優先級 | 操作符 | 說明 |
1 | / | 轉義符 |
2 | (),(?:),(?=),[] | 圓括號和方括號 |
3 | *,+,?,{n},{n,},{n,m} | 限定符 |
4 | ^,$,/anyMatchcharacter | 位置順序 |
5 | | | 或操作 |
正則對象表達式對象
- RegExp對象的屬性與方法
RegExp對象的靜態屬性 | |
屬性 | 說明 |
index | 只讀屬性,返回字符串中第一次與模式相匹配的子字符串的開始位置,初始值爲-1; |
input | 只讀屬性,返回當前被正則表達式模式作用的字符串,可以簡寫爲“$_”,初始值爲空字符串; |
lastIndex | 只讀屬性,返回被查找字符串中下一次成功匹配的子字符串的開始位置,其初始位置爲-1,其值會隨着匹配的不同而被修改; |
lastMatch | 只讀屬性,返回正則表達式在搜索過程中最後匹配的字符,可以簡寫爲:“$&”; |
lastParen | 只讀屬性,返回正則表達式在查找過程中最後用園括號括起來的子匹配; |
leftContext | 只讀屬性,返回被搜索字符串中從開始位置到最後匹配之前爲之間的字符,可以簡寫爲"$^"; |
rightContext | 只讀屬性,返回被搜索字符串中從最後一個匹配位置開始到字符串結尾之間的字符,可以簡寫爲"$'"; |
$1-$9 | 代表$1,$2...$9等9個只讀屬性,返回9個在模式匹配期間找到的,最近保存的部分; |
RegExp對象的實例屬性 | |
global | 只讀屬性,布爾值,表示創建RegExp時是否設置了g標誌,如果設置了則返回true,否則返回false; |
ignoreCase | 只讀屬性,布爾值,表示創建RegExp時是否設置了i標誌,如果設置了則返回true,否則返回false; |
multiline | 只讀屬性,布爾值,表示創建RegExp時是否設置了m標誌,如果設置了則返回true,否則返回false; |
source | 只讀屬性,字符串型,返回正則表達式模式字符串; |
RegExp對象的方法 | |
exec() | RegExp對象的exec()方法是與正則表達式匹配的強大方法,語法格式爲:array=reObj.exec(str); |
test() | RegExp對像的Test()方法用於在給定的字符串中測試正則表達式是否匹配,其基本語法爲:var passed=reObj.text(str);如果匹配則返回true,否則返回false |
compile() | RegExp對象的compile()方法用於將正則表達式編譯爲內部格式,從而執行得更快,其基本語法爲:reObj.compile(pattern[,flag]); |
String對象的4個正則表達式用法
String對象的4個正則表達式方法 | |
search() | 用於查找特定子字符串,其基本語法爲var str=strObj.search(re);方法返回第一個與正則表達式匹配的子字符串; |
replace() | 用於檢索與替換操作,其基本語法格式爲:strObj.replace(re,str);如果re不是正則表達式,則表示普通字符串替換; |
match() | 使用正則表達式模式對字符串進行查找,使用方法爲var array=strObj.match(re);返回三個屬性:1)input包含整個被查找字符串,2)index包含了整個被查找字符串中的匹配的子 字符串的位置,lastindex屬性包含了最後一次匹配字符串的位置; |
split() | 可以使用正則表達式做參數作爲分割字符標誌分割字符串; |
文章出處: http://blog.sina.com.cn/s/blog_5d1f29c10100b35w.html~type=v5_one&label=rela_prevarticle
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
文章採集正則之我見
/(/w+).htm 根據上面的參數可知 匹配所有以字符下劃線數字字符的以.htm結尾的,比如/123kl_p.html
(/(/w+))*.htm 注意 *可是匹配前導字符 0次或者0次以上的 匹配當前頁面所有的以.htm結尾的,並且無限極例如 /q/u/f/j/123_0p.htm.
(/(/w+))+.htm 注意 +可是匹配前導字符 1次或者0次以上的 匹配當前頁面所有的以.htm結尾的,並且無限極例如 /q/u/f/j/123_0p.htm. 增加一個過濾功能
下面的唯一與上面不同的是 將w換爲了d,也就是縮小了範圍 只是匹配數字
/(/d+).htm 根據上面的參數可知 匹配所有以數字.htm結尾的,比如/123.html
(/(/d+))*.htm 注意 *可是匹配前導字符 0次或者0次以上的 匹配當前頁面所有的以.htm結尾的,並且無限極例如 /1/2/3/4/1239.htm.
(/(/d+))+.htm 注意 +可是匹配前導字符 1次或者0次以上的 匹配當前頁面所有的以.htm結尾的,並且無限極例如 /1/2/3/4/1239.htm. 增加一個過濾功能