標籤:div 工具 new null rom javascrip 執行個體化 解析 gobject
1 Regex
使用單個字串來描述、匹配一系列符號某個句法規則的字串,可以簡單理解為按照某種規則去匹配合格字串。
Ps:https://regexper.com/ 可協助理解Regex,Regex工具
2 regexp對象
JavaScript通過內建對象RegExp支援Regex,有兩種方法執行個體化RegExp對象:字面量、建構函式
3 預定義類
. 等價於 [^\r\n] 即除了斷行符號符和分行符號之外的所有字元
\d 等價於[0-9] 即數字字元
\D 等價於[^0-9] 即非數字字元
\s 等價於[\t\n\x0B\f\r] 即空白符
\S 等價於[^\t\n\x0B\f\r] 即非空白符
\w 等價於[A-Za-z_0-9] 即單詞字元
\W 等價於[^a-Za-z_0-9] 即非單詞字元
4 邊界字元
^ 即以xxx開始
$ 即以xxx結束
\b 即單詞邊界
\B 即非單詞邊界
5 量詞
? 即出現0次或1次,最多1次
+ 即出現1次或多次,最少1次
* 即出現0次或多次,任意次
{n} 即出現n次
{n,m} 即出現n到m次
{n,} 即至少出現n次
6 貪婪模式
\d{3,6} //儘可能多的匹配
7 非貪婪模式
讓Regex儘可能少的匹配,即一旦匹配成功匹配不再繼續嘗試。在量詞後面加上?即可。
‘123456789’.match(/\d{3,5}?/g)
8 分組
使用()可以達到分組的功能,使量詞作用於分組
(Byron){3}
9 或
使用|可以達到或的效果
Byron|Casper Byr(on|Ca)sper
10 反向引用
2015-12-25 =》 12/25/2015
‘2015-12-25’.replace(/(\d{4})-(\d{2})-(\d{2})/g,’$2$3$1’)
11 忽略分組
不希望捕獲某些分組,只需要在分組內加上?:即可
(?:Byron).(ok)
12 前瞻
Regex從文本頭部向尾部開始解析,文本尾部方向,稱為“前”。前瞻就是在Regex匹配到規則的時候,向前檢查是否符合斷言。
符合和不符合特定斷言稱為肯定/正向匹配和否定/負向匹配。
正向前瞻:exp(?=asser)
負向前瞻:exp(!=asser)
console.log(‘a2*3‘.replace(/\w(?=\d)/g,‘x‘)); //x2*3 console.log(‘a2*34v8‘.replace(/\w(?=\d)/g,‘x‘));//x2*x4x8 console.log(‘a2*34vv‘.replace(/\w(?=\d)/g,‘x‘));//x2*x4vv console.log(‘a2*34vv‘.replace(/\w(?!\d)/g,‘x‘));//ax*3xxx
13 對象屬性
global:是否全域搜尋,預設false;
ignore:是否大小寫敏感,預設false;
multiline:多行搜尋,預設值false;
lastIndex:是當前運算式匹配內容的最後一個字元的下一個位置
source:Regex的文本字串;
14 正則對象方法
(1) RegExp.prototype.exec(str):使用Regex對字串執行搜尋,並將更新全域RegExp對象的書寫以匹配結果。如果沒有匹配的文本則返回null,否則返回一個結果數組。Index聲明匹配文本的第一個字元的位置;input存放檢索的字串string。
非全域調用:調用非全域的RegExp對象的exec()時,返回數組;第一個元素是與Regex相匹配的文本,第二個元素是與RegExpObject的第一個子運算式相匹配的文本(如果有的話),第三個元素是與RegExp對象的第二個子運算式相匹配的文本(如果有的話),以此類推。
var reg3=/\d(\w)\d/; var reg4=/\d(\w)\d/g; var ts=‘1a2b3c4d5e‘; var ret=reg3.exec(ts); console.log(reg3.lastIndex + ‘\t‘ + ret.index + ‘\t‘ + ret.toString());//0 0 1a2,a console.log(reg3.lastIndex + ‘\t‘ + ret.index + ‘\t‘ + ret.toString());//0 0 1a2,a while(ret = reg4.exec(ts)){ console.log(reg4.lastIndex + ‘\t‘ + ret.index + ‘\t‘ + ret.toString());//3 0 1a2,a //7 4 3c4,c }
(2)RegExp.prototype.test(str):用於測試字串參數中是否存在匹配Regex模式的字串。如果存在則返回true,否則返回false。
14 string與正則相關方法
(1)String.prototype.search(reg):用於檢索字串中指定的子字串,或檢索與Regex相匹配的子字串;方法返回第一個匹配結果index,尋找不到返回-1;search()方法不執行全域匹配,它將忽略g標誌,且總是從字串的開始進行檢索。
console.log("javascript".search(/script/i));//4
(2)String.prototype.match(reg):match()方法將檢索字串,以找到一個或多個與regexp匹配的文本;regexp是否具有標誌g對結果影響很大。
如果regexp沒有g標誌,則match()方法就只能在字串中執行一次匹配;如果沒有找到任何匹配的文本,將返回null,否則返回一個數組,其中存放了與它找到的匹配文本有關的資訊。返回數組的第一個元素存放的是匹配文本,而其餘的元素存放的是與Regex的子運算式匹配的文本;除了常規的數組元素外,返回的數組還包括2個對象屬性,index聲明匹配文本的起始字元在字串的位置,input聲明對stringObject的引用。
如果regexp具有全域標誌g,則match()方法將執行全域檢索,找到字串中的所有匹配子字串;沒有找到任何匹配的子串則返回null,如果找到了一個或多個匹配子串,則返回一個數組。數組元素中存放是字串中所有的匹配子串,且沒有index或input屬性。
var reg3=/\d(\w)\d/; var reg4=/\d(\w)\d/g; var ts=‘$1a2b3c4d5e‘; var ret=ts.match(reg3); console.log(ret);//[ ‘1a2‘, ‘a‘, index: 1, input: ‘$1a2b3c4d5e‘ ] console.log(ret.index + ‘\t‘ +reg3.lastIndex);//1 0 ret = ts.match(reg4); console.log(ret);//[ ‘1a2‘, ‘3c4‘ ] console.log(ret.index + ‘\t‘ + reg4.lastIndex);//undefined 0
(3)String.prototype.split(reg):經常使用split()方法將字串分割為字元數組,
console.log(‘a,b,c,d‘.split(‘,‘)); //[“a”,”b”,”c”,”d”] console.log(‘a1b2c3d‘.split(/\d/)); //[“a”,”b”,”c”,”d”]
(4)String.prototype.replace():
String.prototype.replace(str,replaceStr);String.prototype.replace(reg,replaceStr)String.prototype.replace(reg,function)
其中,function參數含義,function會在每次匹配替換的時候調用,有四個參數:匹配字串、Regex分組內容,沒有分組則沒有該參數、匹配項在字串中的index、原字串。
JavaScriptRegex知識點整理