最近在看某知名js框架的原始碼,突然間發現自己對exec()方法竟然不太理解,然後就仔細的分析了一下這個方法
下面貼個exec()方法使用的**出來
rquickexpr = /^(?:\s*(<[\w\w]+>)[^>]*|#([\w-]*))$/;match = rquickexpr.exec( selector );
exec() 方法就是用來檢索字串中正規表示式的匹配,如果匹配到了那麼就返回乙個存放有結果的陣列,如果沒有匹配到就返回乙個null
(個人感覺這個方法和php裡面的preg_match特別像啊~o(∩_∩)o哈哈~)
exec() 方法使用起來比test方法和string物件的match方法要複雜的多
在這裡說一下test方法和string物件的match方法exec方法返回的陣列的第 0 個元素是與正規表示式相匹配的文字test()用於檢測乙個字串是否匹配某個模式,也是乙個正則匹配的方法,但是test()方法只會返回有沒有匹配到規定的字串,匹配到了就返回true。沒有那麼就返回false。
match()方法可在字串內檢索指定的值,或找到乙個或多個正規表示式的匹配。
match和test的區別在於它可以直接檢測字串中是不是含有某個值,而不需使用正規表示式,第二個區別就是match函式可以進行一次或多次模式匹配,將匹配結果按照乙個陣列進行返回。(使用單次匹配還是多次匹配這取決於在匹配模式中是否含有g,我自己感覺沒有g的就相當於php裡面的preg_match函式,有的就相當於preg_match_all函式,哈哈)
第 1 個元素是與 regexpobject 的第 1 個子表示式相匹配的文字(如果有的話)
第 2 個元素是與 regexpobject 的第 2 個子表示式相匹配的文字(如果有的話)
以此類推。
除了陣列元素和 length 屬性之外,exec() 方法還返回兩個屬性。
index 屬性宣告的是匹配文字的第乙個字元的位置。
input 屬性則存放的是被檢索的字串 string。
我們可以看得出,在呼叫非全域性的 regexp 物件的 exec() 方法時,返回的陣列與呼叫方法 string.match() 返回的陣列是相同的。
但是,當 regexpobject 是乙個全域性正規表示式時,exec() 的行為就稍微複雜一些。
它會在 regexpobject 的 lastindex 屬性指定的字元處開始檢索字串 string。
當 exec() 找到了與表示式相匹配的文字時,在匹配後,它將把 regexpobject 的 lastindex 屬性設定為匹配文字的最後乙個字元的下乙個位置。
lastindex屬性的意思就是當前匹配的字串的最後乙個字元的位置,比如說要在"abcdefg"中匹配"bcd",那麼第一次匹配完成後的lastindex就是4~這就是說,你可以通過反覆呼叫 exec() 方法來遍歷字串中的所有匹配文字。
當 exec() 再也找不到匹配的文字時,它將返回 null,並把 lastindex 屬性重置為 0。
需要注意的是,如果在乙個字串中完成了一次模式匹配之後要開始檢索新的字串,就必須手動地把 lastindex 屬性重置為 0。
關於springCloud中服務方呼叫方的配置
1.我方是服務方,別人呼叫我方,由我方提供位址,不需要呼叫feign。那麼,位址資訊在resourceconfig裡面做配置,resourceconfig中配置的位址相當於是把請求位址暴露給對方,並在此位址請求時對他放行。configuration enableresourceserver publ...
Container DataItem幾種方式
在繫結資料時經常會用到這個句程式 databinder.eval container.dataitem,x 或者 databinder.eval container,dataitem.x 今天又學到一種,而且微軟也說這種方法的效率要比以上兩種高。datarowview container.datai...
Linux Carmer driver註冊方法
最近又開始看carmer的驅動了,在linux下通常實用video4linux框架來實現video capture camera capture等功能,先說一下裝置註冊部分,ov7670.c中,註冊方法如下 static struct v4l2 i2c driver data v4l2 i2c da...