成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

看完你就會(huì)正則表達(dá)式了

Anshiii / 1326人閱讀

摘要:字符串對(duì)象的方法返回替換后的值常用于消除首尾空格方法的第二個(gè)參數(shù)可以使用美元符號(hào)來(lái)指代所替換的內(nèi)容指代匹配的子字符串。與的區(qū)別在于當(dāng)正則表達(dá)式加了標(biāo)識(shí)符時(shí),結(jié)果不同。

出場(chǎng)

為了匹配規(guī)定模式的文本
為了守護(hù)世界的和平
我們是穿梭在銀河的正則表達(dá)式
就是這樣~喵~

好用的正則表達(dá)式可視化工具: https://regexper.com/

語(yǔ)法
//字面量
var regExp1 = /pattern/flags;

//或用構(gòu)造函數(shù)
var regExp2 = new RegExp(pattern[, flags]);

pattern:正則表達(dá)式的匹配模式
flags:可選,正則表達(dá)式的標(biāo)識(shí),也可選多個(gè)。g全局匹配,i忽略大小寫,m匹配多行

一顆超簡(jiǎn)單的栗子:

var regExp = /abc/;
"abcdefg".replace(regExp, "WOW"); // "WOWdefg"
常用特殊字符 1.字符集合
字符 舉例 含義
[] [xyz] xyz中任意一個(gè)字符 等價(jià)于[x-z]
[^] [^xyz] 匹配任意不在xyz中的一個(gè)字符,等價(jià)于[^x-z] (注意與^x區(qū)分,后者表示匹配以x開(kāi)頭的字符)
[-] [1-3] 匹配123中的任意一個(gè)字符,等價(jià)于[123]。注意:連字符只有出現(xiàn)在方括號(hào)中才表示連續(xù)的字符序列。
2.預(yù)定義模式

預(yù)定義模式就是某些常用模式的簡(jiǎn)寫。

字符 含義
. 除 和 之外的任意字符,等價(jià)于[^ ]
d 數(shù)字0-9,等價(jià)于[0-9]
D 非數(shù)字字符,等價(jià)于[^0-9]
w 字母數(shù)字下劃線,等價(jià)于[A-Za-z0-9_]
W 非字母數(shù)字下劃線,等價(jià)于[^A-Za-z0-9_]
s 空白符
S 非空白符
換行符
3.需要轉(zhuǎn)義的字符

正則模式中,需要用斜杠轉(zhuǎn)義的:

* + ? $ ^ . |  ( ) { } [ ]

需要特別注意的是,如果使用RegExp方法生成正則對(duì)象,轉(zhuǎn)義需要使用兩個(gè)斜杠,因?yàn)樽址畠?nèi)部會(huì)先轉(zhuǎn)義一次。

4.邊界
字符 舉例 含義
^ ^a 以a開(kāi)頭(注意與[^]區(qū)分,后者表示匹配不在[^]中的元素)
$ a$ 以a結(jié)尾
 smart,smart 單詞邊界,即[A-Za-z0-9_]之外的字符
B Bsmart 非單詞邊界

舉個(gè)栗子說(shuō)  和 B :

"You are smart, but she is smarter.".replace(/smart/,"kind");
//"You are kind, but she is smarter."

"You are smart, but she is smarter.".replace(/smartB/,"kind");
//"You are smart, but she is kinder."

if(不懂){ 就置幾動(dòng)手試試吧 (? ??_??)? }

5.數(shù)量詞
字符 含義
? 匹配前面的模式 0或1次 {0,1}
* 匹配前面的模式 0或多次 {0,}
+ 匹配前面的模式 1或多次 {1,}
{n} 匹配前面的模式 n次
{n,} 匹配前面的模式 至少n次
{n,m} 匹配前面的模式 至少n次,至多m次
{0,m} 匹配前面的模式 至多m次
x(?=y) 只有x后面緊跟著y時(shí),才匹配x,但是y不是匹配結(jié)果的一部分。例如/smart(?=girl)/只有后面有girl時(shí),才匹配smart,但是girl不是匹配結(jié)果的一部分。
x(?!y) 只有x后面不緊跟著y時(shí),才匹配x。例如/d+(?!.)/只有一個(gè)數(shù)字后面沒(méi)有緊跟著小數(shù)點(diǎn)時(shí)才會(huì)匹配該數(shù)字,/d+(?!.)/.exec("3.141")匹配結(jié)果是141。
6.貪婪與懶惰(非貪婪)

默認(rèn)是貪婪模式匹配,即匹配盡可能多的字符。

var regExp1 = /d{3,6}/;
"1234567890".replace(regExp1, "X");
//"X7890"

若想手動(dòng)開(kāi)啟懶惰模式,需要在模式后加 ?

var regExp1 = /d{3,6}?/;
"1234567890".replace(regExp1, "X");
//"X4567890"
7.分組與反向引用

分組又叫“子表達(dá)式”,把完整的正則表達(dá)式分成一個(gè)個(gè)小組,然后反過(guò)來(lái)用“組號(hào)”去引用這些小組就叫“反向引用”。

用例子來(lái)說(shuō):

//無(wú)分組
var regExp1 = /abc{2}/; //這樣量詞{2}只能匹配到c一個(gè)字符

//分組
var regExp2 = /(abc){2}/; //這樣量詞{2}就可以匹配到abc三個(gè)字符啦 
//同時(shí) abc 也有了一個(gè)組號(hào) $1

再看一個(gè)栗子:

var reg = /(d{1}).*(d{2}).*(d{3})/;
"1sss23sss456".replace(reg,"$1?$2?$3");
//"1?23?456"

上面的栗子換一種使用分組的方式:

var reg = /(d{1}).*(d{2}).*(d{3})/;
var result = reg.exec("1sss23sss456");
console.log(result[1]+"-"+result[2]+"-"+result[3]);
//"1-23-456"

組匹配非常有用,下面是一個(gè)匹配網(wǎng)頁(yè)標(biāo)簽的例子:

var tagName = /<([^>]+)>[^<]*/; // 1 就是第一個(gè)組匹配的內(nèi)容
tagName.exec("bold")[1]

上面代碼稍加修改,就可以捕獲帶有屬性的標(biāo)簽:

var html = "Helloworld";
var tag = /<(w+)([^>]*)>(.*?)/g;

var match = tag.exec(html);

match[1] // "b"
match[2] // " class="hello""
match[3] // "Hello"

match = tag.exec(html);

match[1] // "i"
match[2] // ""
match[3] // "world"

非捕獲組: (?:x) 表示不返回該組匹配的內(nèi)容,即匹配的結(jié)果中不出現(xiàn)這個(gè)括號(hào)。

常用方法 正則對(duì)象的方法 1.RegExp.prototype.test()

測(cè)試當(dāng)前正則是否能匹配目標(biāo)字符串,返回布爾值。

var reg = /d{2}/;
var str = "1sss23sss456";
reg.test(str); //true
2.RegExp.prototype.exec()

在目標(biāo)字符串中執(zhí)行一次正則匹配操作,返回匹配的子字符串。

var reg = /d{2}/;
var str = "1sss23sss456";
var result = reg.exec(str); 
result[0]; //23
result.index; //4
result.input; //"1sss23sss456"
3.RegExp.prototype.toString()

返回一個(gè)字符串,其值為該正則對(duì)象的字面量形式。覆蓋了Object.prototype.toString() 方法。

var reg = /d{2}/;
reg.toString(); // "/d{2}/"
字符串對(duì)象的方法 1. str.replace()

返回替換后的值

var reg = /d{2}/;
var str = "1sss23sss456";
str.replace(reg,"?"); //"1sss?sss456"

常用于消除首尾空格:

var str = "  abc def ggg   ";
str.replace(/^s+|s+$/g, "");
// "abc def ggg"

replace方法的第二個(gè)參數(shù)可以使用美元符號(hào)來(lái)指代所替換的內(nèi)容:

> $& 指代匹配的子字符串。
> $` 指代匹配結(jié)果前面的文本。
> $" 指代匹配結(jié)果后面的文本。
> $n 指代匹配成功的第n組內(nèi)容,n是從1開(kāi)始的自然數(shù)。
> $$ 指代美元符號(hào)$。

replace方法的第二個(gè)參數(shù)還可以是一個(gè)函數(shù),將每一個(gè)匹配內(nèi)容替換為函數(shù)的返回值。這個(gè)函數(shù)可以接受多個(gè)參數(shù),第一個(gè)參數(shù)是捕捉到的內(nèi)容,第二個(gè)參數(shù)開(kāi)始是捕捉到的組匹配(有多少個(gè)組匹配,就對(duì)應(yīng)有多少個(gè)參數(shù))。此外,最后還可以添加兩個(gè)參數(shù),倒數(shù)第二個(gè)是捕捉到的內(nèi)容在整個(gè)字符串中的位置,最后一個(gè)參數(shù)是原字符串。下面是一個(gè)網(wǎng)頁(yè)模板替換的例子:

var prices = {
  "pr_1": "$1.99",
  "pr_2": "$7.99",
  "pr_3": "$9.99",
};

var template = "";

template.replace(
  /()()/, 
  function(match, p1, p2, p3 ,p4) {
    return p1 + p2 + p3 + prices[p2] + p4;
  });
//$1.99

注意:第二個(gè)分組要加 ? 開(kāi)啟懶惰模式,否則正則表達(dá)式默認(rèn)的貪婪模式會(huì)匹配盡可能多的字符。貪婪模式下,上面的例子中第二個(gè)分組會(huì)匹配到pr_1">

exec()的區(qū)別在于:當(dāng)正則表達(dá)式加了g標(biāo)識(shí)符時(shí),結(jié)果不同??蠢踝樱?/p>

var reg = /d{2}/g;
var str = "1sss23sss456";
reg.exec(str); //["23"]
str.match(reg); //["23","45"]
3.search()

返回匹配的首字符的位置。

var reg = /d{2}/;
var str = "1sss23sss456";
str.search(reg); //4
4.split()

返回分割后的數(shù)組。

var reg = /d{2}/;
var str = "1sss23sss456";
str.split(reg); //["1sss","sss","6"]
小練習(xí)

寫一個(gè)匹配手機(jī)號(hào)的正則(第一位是1,第二位是[3,4,5,7,8]中的一個(gè),后面還有9位數(shù)字)

寫一個(gè)匹配 2017-01-01 或 2017/01/01 這兩種格式日期的正則表達(dá)式

————答案:

/^1[34578]d{9}$/

/^d{4}[-/]d{2}[-/]d{2}$/

應(yīng)用 1.使用正則改變數(shù)據(jù)結(jié)構(gòu)
var re = /(w+)s(w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
console.log(newstr); //Smith, John
2.在多行中使用正則表達(dá)式
var s = "Please yes
make my day!";
s.match(/yes.*day/); // null
s.match(/yes[^]*day/); //"yes
make my day"
3.從URL中提取子域名
var url = "http://xxx.domain.com";
console.log(/[^.]+/.exec(url)[0]); //  "http://xxx"
console.log(/[^.]+/.exec(url)[0].substr(7)); //  "xxx"

匹配除了.之外的任意元素,一到多個(gè)字符。

“不會(huì)應(yīng)用等于沒(méi)有學(xué)會(huì)”,熱烈歡迎小伙伴們?cè)谠u(píng)論區(qū)補(bǔ)充平時(shí)用到正則表達(dá)式的地方,然后我會(huì)添加在文章里,一起收集吧 ヽ(??ω?? )ゝ

參考:

1.正則表達(dá)式學(xué)習(xí)筆記

2.MDN RegExp文檔

3.實(shí)戰(zhàn)JS正則表達(dá)式

4.正則表達(dá)式30分鐘入門教程

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82742.html

相關(guān)文章

  • 879本IT技術(shù)書(shū)籍(都看完你就可以升仙兒)

    摘要:珍藏版收集了好幾年的書(shū)回過(guò)頭來(lái)一看真不少拿過(guò)來(lái)跟你們一起分享下載鏈接我也會(huì)在官網(wǎng)上發(fā)布視頻教程呀電影呀有用的資源你們懂得作者作者科技站長(zhǎng)官網(wǎng)百度搜索科技博客公眾號(hào)搜索 珍藏版---收集了好幾年的書(shū),回過(guò)頭來(lái)一看,真不少,拿過(guò)來(lái)跟你們一起分享 showImg(https://img-blog.csdnimg.cn/20181123115931741.png?x-oss-process=i...

    用戶83 評(píng)論0 收藏0
  • 879本IT技術(shù)書(shū)籍(都看完你就可以升仙兒)

    摘要:珍藏版收集了好幾年的書(shū)回過(guò)頭來(lái)一看真不少拿過(guò)來(lái)跟你們一起分享下載鏈接我也會(huì)在官網(wǎng)上發(fā)布視頻教程呀電影呀有用的資源你們懂得作者作者科技站長(zhǎng)官網(wǎng)百度搜索科技博客公眾號(hào)搜索 珍藏版---收集了好幾年的書(shū),回過(guò)頭來(lái)一看,真不少,拿過(guò)來(lái)跟你們一起分享 showImg(https://img-blog.csdnimg.cn/20181123115931741.png?x-oss-process=i...

    Kahn 評(píng)論0 收藏0
  • 879本IT技術(shù)書(shū)籍(都看完你就可以升仙兒)

    摘要:珍藏版收集了好幾年的書(shū)回過(guò)頭來(lái)一看真不少拿過(guò)來(lái)跟你們一起分享下載鏈接我也會(huì)在官網(wǎng)上發(fā)布視頻教程呀電影呀有用的資源你們懂得作者作者科技站長(zhǎng)官網(wǎng)百度搜索科技博客公眾號(hào)搜索 珍藏版---收集了好幾年的書(shū),回過(guò)頭來(lái)一看,真不少,拿過(guò)來(lái)跟你們一起分享 showImg(https://img-blog.csdnimg.cn/20181123115931741.png?x-oss-process=i...

    Airmusic 評(píng)論0 收藏0
  • 正則達(dá)式迷你書(shū)-筆記

    摘要:使用看完你就會(huì)正則表達(dá)式了四種操作驗(yàn)證切分提取替換第一章正則表達(dá)式字符匹配攻略正則表達(dá)式是匹配模式,要么匹配字符,要么匹配位置至少,至多匹配中的任一個(gè)字符范圍表示法如果要匹配則要么要么要么通配符,表示幾乎任意 API 使用 String#search String#split String#match String#replace RegExp#test Reg...

    IamDLY 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<