簡體   English   中英

使用RegExp捕獲URL的可選部分

[英]Capturing optional part of URL with RegExp

在為我的站點編寫API服務時,我意識到String.split()不會做得更長久,因此決定嘗試使用正則表達式來碰碰運氣。 我差不多完成了,但是找不到最后一點。 這是我想做的:

該URL表示一個函數調用:

/api/SECTION/FUNCTION/[PARAMS]

最后一部分(包括斜杠)是可選的。 一些函數無需接收任何參數即可顯示JSON回復。 示例: /api/sounds/getAllSoundpacks打印可用聲音包的列表。 不過, /api/sounds/getPack/8Bit打印詳細信息。

這是我嘗試過的表達式:

req.url.match(/\/(.*)\/(.*)\/?(.*)/);

我缺少使最后一部分成為可選部分或全部捕獲的內容嗎?

這將捕獲URL中FUNCTION /之后的所有內容,而與FUNCTION /之后的其他內容無關:

FUNCTION\/(.+)$

如果在FUNCTION之后沒有任何部分,則RegExp將不匹配。

此正則表達式應通過在最后一個斜杠和可選部分后的部分進行工作:

/^\/[^/]*\/[^/]*(?:\/.*)?$/

這匹配所有這些字符串:

/api/SECTION/FUNCTION/abc
/api/SECTION
/api/SECTION/
/api/SECTION/FUNCTION

您的模式/(.*)/(.*)/?(.*)幾乎是正確的,它有點太短-允許2或3個斜杠,但是您想接受3或4個斜杠的任何東西。 而且,如果您想捕獲最后一個(可選)斜杠及其后的所有文本,只需在該部分周圍創建一個組並將其設為可選:

/.*/.*/.*(?:/.+)?

應該可以。

演示 (由於啟用了多行模式,該模式看起來有所不同,但仍然可以使用。它也有點“更好”,因為它不匹配“ ///”之類的垃圾。)

暫無
暫無

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

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