正則是獨立於編程語言的一個學科,用於解決模式匹配問題,Javascript提供了對於正則支持,此外,Java、c、python也都支持正則。正則能夠應用在:檢索,替換,爬蟲,論文查重等領域。javascript
實例化正則表達式對象html
- 字面量
var pattern = /正則表達式/標記
var pattern = /abc/igm - 構造函數
var pattern = new RegExp(「正則表達式」,「標記」);
var pattern = new RegExp(「abc」,「igm」);
標記:
i ignoreCase 忽略大小寫
g global 全局
m multiline 多行
u unicode 任何 Unicode 代碼點的轉義都會被解釋。
y sticky 屬性反映了搜索是否具備粘性
正則表達式java
-
直接量
abc 例如:/abc/ 查找目標串中是否含有abc
python -
字符類
[abc] 例如:/[abc]/ 查找目標串中是否含有abc中任意一個字符
[^abc] 例如:/[^abc]/ 查找目標串中是否含有除了abc以外任意一個字符
[a-z] a~z中的任意一個字符
\w 字母 [a-zA-Z0-9]
\W 非字母 [^a-zA-Z0-9]
\d 數字 [0-9]
\D 非數字[^0-9]
\s 空白符
\S 非空白符
web多行模式下
^ 以…開始 /^\d\w{3}\d$/ 覺得數字開頭,以數字結尾
$ 以…結尾
正則表達式 -
數量詞
數量通常使用在子表達式(直接量,字符類,分組…)後
/1[3578]\d{9}/
{9} 重複9次
{1,9} 重複1~9次
{1,} 重複1次及以上
{0,} 重複0次及以上
* 等價於{0,}
+ 等價於{1,}
? 等價於{0,1}
編程貪婪匹配
默認是貪婪匹配
{1,9} 優先匹配9次
非貪婪匹配
數量詞後添加?就成爲了非貪婪匹配
{1,9}? 優先匹配1次
數組 -
選擇
子表達式中間添加"|"表示選擇
例如:
/hello|hi/
編程語言 -
分組
獲取目標字符串中全部的url,而且分別拿到協議,ip,port,路徑
url 協議://ip:port/路徑
svn
var pattern =
/(http|https|ftp|svn) \ : //((\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})|(www.\w{2,}.com)):?(\d{2,5})(/[a-z0-9/]{2,})/ig
/() : //(()|()): ()()/
- 引用
經過"\數字"對以前分組匹配結果的一種引用。\1 就表示對第一個分組匹配結果的引用
var str = 「12hello12」
var str = 「871wrold871」
var str = 「871wrold888」var pattern = /(\d{2,})\w+\1/
API
1.實例屬性
RegExp.prototype.flags 標記
RegExp.prototype.source 正則字符串
RegExp.prototype.ignoreCase
RegExp.prototype.global
RegExp.prototype.multiline
RegExp.prototype.unicode
RegExp.prototype.sticky
這裏有個簡單的例子來直接的理解這些屬性的做用:
var pattern = /hello/igm; console.log(pattern);// /hello/gim console.log("source:",pattern.source);// source: hello console.log("flags:",pattern.flags);// flags: gim console.log("ignoreCase:",pattern.ignoreCase);// ignoreCase: true console.log("global:",pattern.global);// global: true console.log("multiline:",pattern.multiline);// multiline: true console.log("unicode:",pattern.unicode);// unicode: false
2.實例方法
RegExp.prototype.test(str)
目標字符串中是否能夠知足正則表達式的匹配要求
支持全局匹配。當全局匹配的時候,會在正則表達式對象pattern上維 護一個變量 lastIndex,表示下次開始檢索的位置。
參數:字符串
返回值:boolean
RegExp.prototype.exec(str)
從目標字符串中獲取知足正則表達式匹配要求的子串。
支持全局匹配。當全局匹配的時候,會在正則表達式對象pattern上維護一個變量,lastIndex,表示下次開始檢索的位置。
參數:字符串
返回值:數組
數組元素爲匹配的結果
exec的返回值的數組中的第一個元素總體匹配的結果, 第二個元素爲第一個分組結果, 第三個元素爲第二個分組的結果
數組屬性index表示當前子串在目標串中的位置,input表示目標串,groups表示分組
如下是一個檢索網址的例子:
//檢索網址 var str = "hello , i am terry, my website is http://134.175.154.93:8888/personal/index.html, ftp url is ftp://172.16.0.2 0/webui , my phone 18812345432, my friend is larry ,his telephone is 13710009999,his web site is http://www.larry.com/p ersonal/my.index.html , his email is larry@briup. com, my other first is jacky, his telephoen is 17751229900"; //網址的正則表達式 var a = /(http|https|ftp|svn)\:\/\/((\d{ 1,3}\.\d{ 1,3}\.\d{ 1,3}\.\d{ 1,3})|(www\.\w{ 2,}\.com))\:?(\d{ 2,5})?(\/[a-z0-9/]{ 2, })/ig let result = null; while(result = a.exec(str)){ console.log(result); }
輸出的結果:
[ 'http://134.175.154.93:8888/personal/index',//總體的匹配結果 'http',//第一個分組結果 '134.175.154.93', '134.175.154.93', undefined, '8888', '/personal/index', index: 34, //當前子串在目標串中的位置 input: 'hello , i am terry, my website is http://134.175.154.93:8888/personal/index.html, ftp url is ftp://172.16.0.20/webui , my phone 18812345432, my friend is larry ,his telephone is 13710009999,his web site is http://www.larry.com/personal/my.index.html , his email is larry@briup. com, my other first is jacky, his telephoen is 17751229900', //檢索的目標串 groups: undefined//分組 ] [ 'ftp://172.16.0.20/webui', 'ftp', '172.16.0.20', '172.16.0.20', undefined, undefined, '/webui', index: 93, input: 'hello , i am terry, my website is http://134.175.154.93:8888/personal/index.html, ftp url is ftp://172.16.0.20/webui , my phone 18812345432, my friend is larry ,his telephone is 13710009999,his web site is http://www.larry.com/personal/my.index.html , his email is larry@briup. com, my other first is jacky, his telephoen is 17751229900', groups: undefined ] [ 'http://www.larry.com/personal/my', 'http', 'www.larry.com', undefined, 'www.larry.com', undefined, '/personal/my', index: 206, input: 'hello , i am terry, my website is http://134.175.154.93:8888/personal/index.html, ftp url is ftp://172.16.0.20/webui , my phone 18812345432, my friend is larry ,his telephone is 13710009999,his web site is http://www.larry.com/personal/my.index.html , his email is larry@briup. com, my other first is jacky, his telephoen is 17751229900', groups: undefined ]
總結 這篇是我在學習js正則時總結的一些基礎,掌握!