摘要:直接調(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.name為0
方法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
摘要:可以指定一個具體值,而非增量,在之間。這是因為,使進度增加超過時,會變成,之后又從重新開始。所以,當為時,我們停止調(diào)用。 依賴jQuery。 import nprogress from nprogress import nprogress/nprogress.css $(#btn-loading).on(click, function () { nprogress.start...
摘要:繪制變換曲線起飛以上函數(shù)就是我們基于內(nèi)置的實現(xiàn)的自定義變換。例如飛行動畫結(jié)束后,將飛機復位。 如何運行的? new Vue({ el:#app-1, data:{ position:{ distance:10, height:30, } }, methods:{ ...
摘要:調(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 的實際屬性值可以通...
閱讀 3247·2021-09-22 15:58
閱讀 1716·2019-08-30 14:17
閱讀 1716·2019-08-28 18:05
閱讀 1504·2019-08-26 13:33
閱讀 683·2019-08-26 12:20
閱讀 606·2019-08-26 12:18
閱讀 3192·2019-08-26 11:59
閱讀 1400·2019-08-26 10:36