熟悉又陌生的正則匹配之基礎篇

2021-08-19 01:28:50 字數 1561 閱讀 6778

從當前專案中,隨便拉了一塊兒小**:

vue.prototype.getquerystring = function(name)

功能麼,就是從url中匹配出key等於入參為name的值。這段**直接簡化,把被匹配的url字串和入參name變成已知,來看看結果是啥:

var name="d";

var reg = new regexp("(^|&)" + name + "=([^&]*)(&|$)", "i");

var url="?as=11&b=33&d=w";

var res = url.match(reg);

console.log(res) 

輸出是乙個陣列:["&d=w", "&", "w", "", index: 11, input: "?as=11&b=33&d=w"]

所以複習的第乙個知識點是:regexp:

我們看到,使用regexp的時候,new了一下,只有建構函式才要new麼。所以通俗就可以理解為regexp是js內建的乙個建構函式,會建立並返回乙個具體的物件,入參有兩個,第乙個是正規表示式,第二個是一些補充規則。剛剛我們說regexp會建立物件,這個物件有很多方法:regexp物件有3個方法:test()、exec()以及compile()。

再來,我們看到url字串直接呼叫match,總結一下,string物件有如下幾個方法,可以使用正則匹配

繼續,到了我們的最重要的部門,正規表示式:"(^|&)" + name + "=([^&]*)(&|$)"。首先我們來理解一下這個表示式吧,逐個拆解:

表示式中的():分組,也就是子模組,正則機制會捕獲子表示式的結果。我的理解呢,就是表示式整體可以匹配出一種結果,表示式中用()括起來的,是乙個乙個子表示式,能有對應的結果。所以上面這個表示式,除了整體的乙個結果,還有三個子結果,對應()中的子表示式的具體結果。所以我們記得,之前把匹配結果輸出是陣列:["&d=w", "&", "w", "", index: 11, input: "?as=11&b=33&d=w"],其中就是按照整體匹配結果、()子表示式匹配結果等順序塞進去陣列的。

^aaa:表示以^緊跟著的符號開頭 ,即匹配出以aaa開頭的字串

aaa$:以$前緊跟著的符號結尾,即匹配出以aaa結尾的字串。

所以^aaaa$,這個表示絕對匹配出aaaa。

| :或

* :若干

:在裡的任意組合的集合,[abc],則匹配出 a b c ab ac bc中任意乙個

[^] :^寫在裡表示非。即排除裡的,

/g 表示該表示式將用來在輸入字串中查詢所有可能的匹配,返回的結果可以是多個。如果不加/g最多隻會匹配乙個,

/i  表示匹配的時候不區分大小寫

/m 表示多行匹配,什麼是多行匹配呢?就是匹配換行符兩端的潛在匹配。影響正則中的^$符號

好了,知道了以上這寫基礎符號的意義,可以翻譯出上面這句表示式了:匹配出(以&或者name開頭)=(除了若干&的字元)(以左邊括號裡的字元或者&結尾):"a=1"   "&b=2"  "&c=3"都是符合的。

陌生又熟悉的HTTP協議

一.http是什麼?1.http協議 hypertext transfer protocol,超文字傳輸協議 2.網際網路上應用最為廣泛的一種網路傳輸協議,用於從全球資訊網伺服器傳輸超文字到本地瀏覽器的傳輸協議,所有的www檔案必須遵守這個標準,3.http是乙個基於tcp ip通訊協議來傳遞資料 ...

ifconfig 最熟悉又陌生的命令列

當面試聽到這個問題的時候,面試者常常會覺得走錯了房間。我面試的是技術崗位啊,怎麼問這麼簡單的問題?的確,即便沒有專業學過計算機的人,只要倒騰過電腦,重灌過系統,大多也會知道這個問題的答案 在 windows 上是 ipconfig,在 linux 上是 ifconfig。那你知道在 linux 上還...

乙個十分熟悉又陌生的腳步向我臨近我抬頭

活力四射的台詞 今天的活力四射的台詞,不像夏天那樣生機盎然,可我們真是自討苦吃,乙個十分熟悉又陌生的腳步向我臨近我抬頭,棉襪帶2雙,她是乙個陽光女孩,成熟的穀粒金燦燦的布滿了田野,金色的橘子,漂流要經過三個險探,我們想去湊熱鬧。真讓人留戀往返,我看見後面幾隻相皮船上的人在打水戰,媽媽也下班回來了,活...