再一次開(kāi)始正則表達(dá)式的學(xué)習(xí)施禾,可能更應(yīng)該說(shuō)是復(fù)習(xí)祷嘶。
這一次的學(xué)習(xí)從MDN文檔開(kāi)始俗他,首先記住元字符脖捻,它們表示特定的含義
對(duì)于匹配到單詞的元字符
\d:匹配數(shù)字,\D則匹配非數(shù)字兆衅;
\w:匹配單字符地沮,\W匹配一個(gè)非單字符,單字符——[A-Za-z0-9_]羡亩;
\s: 匹配一個(gè)空白字符摩疑,\S匹配一個(gè)非空白字符;
.:匹配除換行符之外的任何單個(gè)字符畏铆,那么搭配上換行符\n雷袋,也就代表了所有字符
關(guān)于匹配的起始元字符:
^:匹配開(kāi)頭,$:匹配結(jié)束
對(duì)于數(shù)量的匹配元字符:
顧名思義辞居,就是指這個(gè)字符你想匹配它出現(xiàn)幾次的場(chǎng)景
*:意思是這個(gè)表達(dá)式出現(xiàn)0次或多次
+:匹配表達(dá)式出現(xiàn)一次或者多次的場(chǎng)景
楷怒?:匹配表達(dá)式出現(xiàn)0次或者1次
{n}:匹配表達(dá)式出現(xiàn)n次
關(guān)于匹配模式 分組和引用
(x):捕獲符號(hào)蛋勺,捕獲并且記住
(?:x): 捕獲但是不記住
關(guān)于查找模式
x(?=y):匹配后面為y的x
x(!=y):匹配后面不為y的x
(?<=y)x:匹配前面為y的x
(?<!y)x:匹配前面不為y的x
如何將用戶(hù)輸入轉(zhuǎn)義為正則表達(dá)式中的一個(gè)字面字符串:
function escapeRegExp(string){
return string.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$&");
//$&表示整個(gè)被匹配的字符串
}
關(guān)于工作中小小的應(yīng)用,在一個(gè)字符串中需要查詢(xún)另一個(gè)字符串的存在鸠删,因?yàn)樾枰谝粋€(gè)fullpath中找到另一個(gè)path的存在抱完,但是因?yàn)閜ath的順序不一定能對(duì)上,所以把path先剪切成一個(gè)數(shù)組刃泡,然后組成一個(gè)正則表達(dá)式巧娱,只要能在fullpath當(dāng)中匹配到path里面的元素就成功匹配
const fullPath = '1001,1002,1005'
const rowPath = '1005,1002'
const rowPathArr = rowPath.split(',');
let regexp = '.*';
rowPathArr.map(rPath => {
regexp = regexp + rPath + '.*'
})
let regex = new RegExp(regexp);
if (regex.test(fullpath)) {
return true
}