正则表达式基本概念
什么是正則表達式
正則表達式是一個描述字符模式的對象。主要用來驗證客戶端的輸入數據,用戶填寫完表單信息提交后,就會傳遞給后臺服務器,服務器會通過PHP等后臺腳本進行處理,因為客戶端驗證,節約了大量的服務器資源,并提供了良好的用戶體驗。
創建正則表達式
創建正則表達式有兩種方法:
var pattern = new RegExp('box');
var pattern = /box/ flags; //兩個斜杠和box之間不能有空格
模式修飾符的可選參數:
| g | 全局模式(global) |
| i | 不區分大小寫(case-insensitive) |
| m | 多行模式(multiline) |
測試正則表達式
exct() 接收一個參數,該參數和模式匹配,把模式作為數組返回;未匹配到返回null
test() 接收一個參數,該參數和模式匹配,返回true,否則返回false
使用字符串的正則表達式方法
String對象中的正則表達式方法:
| match(pattern) | 返回匹配到模式中的字符串或null |
| replace(pattern,replacement) | 用replacement替換pattern |
| search(pattern) | 返回字符串中pattern開始的位置 |
| split(pattern) | 返回用空格拆分的數組 |
例:
var pattern = /box/ig; var str = "This is Box! This is Box!"; alert(str.match(pattern)); //Box Box開啟全局模式,將所有匹配的字符串組合成數組;
未開啟全局模式,匹配到第一個字符串就返回。
開啟全局模式,將匹配到的字符串全部替換掉;
未開啟全局模式,只替換掉第一個查找到的字符串。
查找返回的位置:查到返回對應的位置,未查到返回-1;無需全局模式。
var pattern = / /i; var str = "This is Box! This is Box!"; alert(str.split(pattern));返回用空格拆分的數組
RegExp對象的靜態屬性:
| input | $_ | 當前被匹配的字符串 |
| lastMatch | $& | 最后一個匹配字符串 |
| lastParen | $+ | 最后一對圓括號內的匹配子串 |
| leftContext | $` | 最后一次匹配前的字符串 |
| multiline | $* | 用于指定是否所有的表達式都用于多行的,返回布爾值 |
| rightContext | $' | 最后一次匹配之后的字符串 |
所有的屬性都可以用短名來操作,其中$_可以用點表示法來操作,其他都不可以。
正則表達式元字符是包含特殊含義的字符,可以控制匹配模式的方式。反斜杠后的元字符將失去其含義。
獲取控制
字符類:單個字符和數字
| . | 匹配除換行符號外的任意字符 |
| [a-zA-Z0-9] | 匹配方括號中任意字符 |
| 1 | 匹配不是方括號中任意字符 |
| d | 匹配任意數字和[0-9]相同 |
| D | 匹配非數字和2相同1 |
| w | 匹配字母和數字及_ |
| W | 匹配非字母和數字及_ |
字符類:空白字符
| 0 | 匹配null字符 |
| b | 匹配空格字符 |
| f | 匹配進紙字符 |
| n | 匹配換行符 |
| r | 匹配回車字符 |
| t | 匹配制表符 |
| s | 匹配空白字符、空格、制表符和換行符 |
| S | 匹配非空白字符 |
字符類:替代字符
| this\ | where\ | logo | 匹配 this 或 where 或 logo 中任意一個,` | `必須用分組符號包含起來 |
字符類:錨字符
| ^ | 行首匹配 |
| $ | 行尾匹配 |
| A | 只有匹配字符串開始處 |
| b | 匹配單詞邊界,詞在[]內時無效 |
| B | 匹配非單詞邊界 |
| G | 匹配當前搜索的開始位置 |
| Z | 匹配字符串結束處或行尾 |
| z | 只匹配字符串結束處 |
字符類:重復字符
| x? | 匹配0個或1個x |
| x* | 匹配0個或1個或多個x |
| x+ | 匹配1個或多個x |
| (xyz)+ | 匹配至少一個(xyz) |
| x{m,n} | 匹配最少m個、最多n個x |
字符類:替代字符
| (string) | 分組表示一個字符,用圓括號表示 |
| 1 或$1 | 匹配第一個分組中的內容 |
| 2 或$2 | 匹配第二個分組中的內容 |
| 3 或$3 | 匹配第三個分組中的內容 |
貪婪和惰性(非貪婪)
貪婪是盡可能多的匹配內容,惰性(非貪婪)這是盡可能少的匹配內容
貪婪是從結尾開始匹配,惰性(非貪婪)是從開頭開始匹配
| + | +? |
| ? | ?? |
| * | *? |
| {n} | {n}? |
| {n,} | {n,}? |
| {n,m} | {n,m}? |
下面例子匹配8和8中的內容,把他替換成QQ
var pattern = /8(.+?)8/g; var str = 'This is 8google8, That is 8google8, There is 8google8'; var result = str.replace(pattern,'QQ'); document.write(result); 輸出結果:This is QQ, That is QQ, There is QQ錯誤匹配:8google, That is 8換成QQ,google不變,8, There is 8替換成QQ,google8不變,就是我們看到的結果。
var pattern = /8(.+?)8/g; var str = 'This is 8google, That is 8google8, There is 8google8'; var result = str.replace(pattern,'QQ'); document.write(result); 輸出結果:This is QQgoogleQQgoogle8錯誤匹配:8google8換成QQ,google不變,8, That is 8替換成QQ,google不變,8, There is 8替換成QQ,google8不變,就是我們看到的結果。
var pattern = /8(.+?)8/g; var str = 'This is 8google8google8, That is 8google8, There is 8google8'; var result = str.replace(pattern,'>QQ'); document.write(result); 輸出結果:This is QQgoogleQQgoogleQQgoogle8總結
- 上一篇: elasticsearch实现远程索引复
- 下一篇: OpenCASCADE 麻花钻头造型实例