簡體   English   中英

節點Express 4-用於路由的正則表達式。 字母或字母數字,包括連字符,但非純數字

[英]Node, Express 4 - Regex for routing. Alpha or Alphanumeric including hyphen but not purely numeric

我正在嘗試構建一個正則表達式,以匹配數字(0-9),字母字符和連字符的任意組合,而不是純數字,用於路由。 我可以給出的最簡單的示例如下。

router.param('slug', function(req, res, next, slug){
     req.slug = slug;
     next();
}
router.get(':slug((?=[a-zA-Z-])[a-zA-Z-\d]+)', function(req, res){
     res.send(req.slug);
}

regex背后的邏輯已在regex101.com上進行了測試

(?=[a-zA-Z-])[a-zA-Z-\\d]+

這個想法是一個積極的前瞻,可以匹配az,AZ或-中的至少一個,然后匹配az,AZ,0-9的任意組合。

除非它不適用於快遞。 它將匹配“ h”,“ h-”,“ h-9”,但不匹配“ 9-”或“ 9a”。 此外,當參數匹配時,param調用中的slug參數為空。 我感到難過。 我懷疑這可能是正則表達式字符串的轉義問題?

這里是對param調用文檔的參考。 http://expressjs.com/en/api.html#router.param

任何幫助表示贊賞。

更新:我認為這與正則表達式中沒有捕獲組有關。

另一個更新:以下正則表達式有一個捕獲組,可在regex101.com上運行,但沒有帶有Express的骰子...我在這里缺少什么?

(\\d*[a-zA-Z-][a-zA-Z-\\d]*$)+

第三次更新:express正在調用該庫https://github.com/pillarjs/path-to-regexp ,它有幫助地指出我應該轉義反斜杠。 我已經編輯了帖子以反映這一點。 圖書館本身正在扭轉這一局面

(\\d*[a-zA-Z-][a-zA-Z-\\d]*$)+

進入這個

^\/(?:((\d(.*)[a-zA-Z-][a-zA-Z-\d](.*)$))+)\/?$

謝謝

應該這樣做:

(?!\\d+$)[a-zA-Z-\\d]+

火柴:

foo-123 123-bar foobar

不匹配:

123456

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM