国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PocketLibs(2)—— 請求相關(guān) path-to-regexp

Prasanta / 2519人閱讀

摘要:直接調(diào)用構(gòu)造函數(shù)使用,一個可能含某種匹配模式的路徑字符串作為它的必選參數(shù),它返回一個正則對象。有兩個方法返回一個正則對象,效果與調(diào)用構(gòu)造函數(shù)一樣返回一個函數(shù),該函數(shù)與下面的返回的函數(shù)功能一樣方法,同樣接收一個路徑字符串。

code in here
使用path-to-regexp,我們可以在路徑字符串中使用正則。如/:foo*/:bar?/icon-:foo(d+).png等。
像express、vue好多框架都引用它做路徑匹配,看一看,一勞永逸。

直接調(diào)用構(gòu)造函數(shù)使用,一個可能含某種匹配模式的路徑字符串作為它的必選參數(shù),它返回一個正則對象
我們的請求路徑與該正則匹配,匹配成功就是接上頭了。

const pathToRegexp = require("path-to-regexp")
var regexp_1 = pathToRegexp("/foo/:bar")// /^/foo/([^/]+?)(?:/)?$/i
regexp_1.exec("/foo/barrrr")//匹配成功 =>RegExpExecArray [ "/foo/barrrr", "barrrr", index: 0, input: "/foo/barrrr" ]
regexp_1.exec("/bazzzz")//匹配失敗 => null

/foo/:bar中的/為分隔符,把多個匹配模式分隔開,這里就分成foo:bar。像foo這種不帶:前綴的,我們請求的路徑需要和它完全匹配,而:bar這種,叫命名參數(shù),就像個函數(shù)形參,可以傳遞任何請求路徑字串給它。

在命名參數(shù)上,我們可以使用參數(shù)修飾符作為其后綴,有?+*

var regexp_2 = pathToRegexp("/foo/:bar*")
regexp_2.exec("/foo/a/b/c")// => [ "/foo/a/b/c", "a/b/c", index: 0, input: "/foo/a/b/c" ]
regexp_2.exec("/foo")// => [ "/foo", undefined, index: 0, input: "/foo" ]

*表示我這個命名參數(shù):bar可以接收隨意個匹配模式,就好像參數(shù)數(shù)組長度[0,+∞)

var regexp_3 = pathToRegexp("/foo/:bar+")
regexp_3.exec("/foo/a/b/c")// => [ "/foo/a/b/c", "a/b/c", index: 0, input: "/foo/a/b/c" ]
regexp_3.exec("/foo")//匹配失敗 =>  null

+ 表示命名參數(shù)可以接收至少一個匹配模式,一個都沒就匹配失敗,[1,+∞)

var regexp_4 = pathToRegexp("/foo/:bar?")
regexp_4.exec("/foo/a")// => [ "/foo/a", "a", index: 0, input: "/foo/a" ]
regexp_4.exec("/foo/a/b/c")// => null
regexp_4.exec("/foo")// => [ "/foo", undefined, index: 0, input: "/foo" ]

? 表示命名參數(shù)可以接收0個或1個匹配模式,多個失敗,[0,1]

我們還可以為命名參數(shù)加上自定義的正則匹配模式

var regexp_5 = pathToRegexp("/icon-:foo(d+).png")
regexp_5.exec("/icon-123.png")// => [ "/icon-123.png", "123", index: 0, input: "/icon-123.png" ]
regexp_5.exec("/icon-abc.png")// null

以上設置表示:foo只能是數(shù)字。

更牛X的是,某些時候不需要命名參數(shù)這個占位符,通過正則就能就能匹配。

var regexp_5 = pathToRegexp("/icon-(d+).png")
regexp_5.exec("/icon-123.png")// => [ "/icon-123.png", "123", index: 0, input: "/icon-123.png" ]
regexp_5.exec("/icon-abc.png")// null

以上就是這個lib包含的所有匹配形式了。

雞肋部分

path-to-regexp還包含了沒什么用的參數(shù)和方法。

構(gòu)造函數(shù)上的可選參數(shù)keys

var regexp_6 = pathToRegexp("/:foo/icon-(d+).png",keys)
regexp_6.exec("/home/icon-123.png")// => [ "/icon-123.png", "123", index: 0, input: "/icon-123.png" ]
regexp_6.exec("/about/icon-abc.png")// null
console.log(keys) 
/**
keys output =>
[ { name: "foo",
    prefix: "/",
    delimiter: "/",
    optional: false,
    repeat: false,
    partial: false,
    pattern: "[^/]+?" },
  { name: 0,
    prefix: "",
    delimiter: "/",
    optional: false,
    repeat: false,
    partial: false,
    pattern: "d+" } ]
*/

keys為一個數(shù)組,包含了所有參數(shù)的具體信息,看屬性名就知道這些信息具體是干嘛的了。
注意: 未命名參數(shù)的keys.name0

方法pathToRegexp.parse(path),接收一個路徑字符串參數(shù)

var tokens = pathToRegexp.parse("/foo/:baz/icon-(d+).png")
console.log(tokens)
/**
tokens output =>
[ "/foo",
  { name: "baz",
    prefix: "/",
    delimiter: "/",
    optional: false,
    repeat: false,
    partial: false,
    pattern: "[^/]+?" },
  "/icon-",
  { name: 0,
    prefix: "",
    delimiter: "/",
    optional: false,
    repeat: false,
    partial: false,
    pattern: "d+" },
  ".png" ]
*/

該方法返回一個tokens數(shù)組,該數(shù)組與keys類似,不過它還包含路徑中那些非參數(shù)部分,如tokens[0]/foo

我們可以不傳具體的路徑字符串,而使用tokens代替。

var regexp_7 = pathToRegexp.tokensToRegExp(tokens)
regexp_7.exec("/foo/bazzz/icon-123.png")//[ "/foo/bazzz/icon-123.png","bazzz","123",... ]
var toPathWithTokens = pathToRegexp.tokensToFunction(tokens)
toPathWithTokens({baz:"bazzz",0:"123"}) // => /foo/bazzz/icon-123.png

有兩個方法:
pathToRegexp.tokensToRegExp(tokens) 返回一個正則對象,效果與調(diào)用構(gòu)造函數(shù)一樣
pathToRegexp.tokensToFunction(tokens) 返回一個函數(shù),該函數(shù)與下面的compile(path)返回的函數(shù)功能一樣

方法 pathToRegexp.compile(path),同樣接收一個路徑字符串。

var toPath = pathToRegexp.compile("/foo/:baz/icon-(d+).png")
toPath({baz:"bazzz",0:"123"})//=> /foo/bazzz/icon-123.png

該方法返回一個函數(shù),該函數(shù)接收一個對象,以對象的形式傳值給路徑參數(shù),返回請求路徑。

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/93960.html

相關(guān)文章

  • 路由

    摘要:由命名路由與子路由構(gòu)成整體結(jié)構(gòu),我們用它構(gòu)建如下頁面。以下兩張圖說明路由和子路由是如何工作的。繼續(xù)修改好友信息的路由部分添加好友信息為組件添加動態(tài)路由為動態(tài)路由添加為路徑參數(shù)添加數(shù)據(jù)下發(fā)為組件添加,并使用它。 不使用vue-router的情況 代碼官方給出下面的例子在不使用vue-router的情況下來實現(xiàn)一個路由。該示例結(jié)合了H5歷史管理API、單文件組件、JS模塊相關(guān)內(nèi)容來實現(xiàn)路由...

    Aklman 評論0 收藏0
  • PocketLibs(3)—— 進度條 NProgress

    摘要:可以指定一個具體值,而非增量,在之間。這是因為,使進度增加超過時,會變成,之后又從重新開始。所以,當為時,我們停止調(diào)用。 依賴jQuery。 import nprogress from nprogress import nprogress/nprogress.css $(#btn-loading).on(click, function () { nprogress.start...

    crossoverJie 評論0 收藏0
  • PocketLibs(1)—— 動畫 tween.js

    摘要:繪制變換曲線起飛以上函數(shù)就是我們基于內(nèi)置的實現(xiàn)的自定義變換。例如飛行動畫結(jié)束后,將飛機復位。 如何運行的? new Vue({ el:#app-1, data:{ position:{ distance:10, height:30, } }, methods:{ ...

    ShowerSun 評論0 收藏0
  • vue-router 一些容易被忽略的知識點

    摘要:調(diào)用全局的守衛(wèi)。在被激活的組件里調(diào)用。用創(chuàng)建好的實例調(diào)用守衛(wèi)中傳給的回調(diào)函數(shù)。 本文適用于對 Vue.js 和 vue-router 有一定程度了解的開發(fā)者除特殊說明,vue-router 版本為 3.0.2 正文 路由 class 匹配 路由匹配后會給該標簽添加 class 屬性值 .router-link-active,該功能在嵌套路由中十分方便 class 的實際屬性值可以通...

    chunquedong 評論0 收藏0

發(fā)表評論

0條評論

Prasanta

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<