1. 程式人生 > >js正則表示式 URL格式匹配詳解

js正則表示式 URL格式匹配詳解

0、URL格式

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

[;parameters]沒見過 這裡就不做相關匹配了

 

1、程式碼及執行結果

'use strict';
{
    // URL地址匹配格式: protocol :// hostname[:port] / path / [;parameters][?query]#fragment
    // [;parameters]:這都沒見過這東西,就不匹配了。
    let url = [
        
'https://www.baidu.com/', 'http://192.168.1.1', 'http://192.168.1.1:8080', 'https://news.163.com/18/1224/15/E3Q6EJDA0001875N.html#top', 'https://baidu.com:80/?wd=wq&url=ksks#ddsx2', 'http://192.168.1.1/p/#name', 'https://neets.cc/subcriberlist?recommendInventoryId=QNZfMjCRQtS4z8MQrFa7qo' ] , result
= null , matcht = /^(https?:\/\/)([0-9a-z.]+)(:[0-9]+)?([/0-9a-z.]+)?(\?[0-9a-z&=]+)?(#[0-9-a-z]+)?/i , info = ['完整URL', '協議', '地址', '埠', '路徑', '查詢', '錨點'] url.forEach((value) => { result = matcht.exec(value); console.log('---------------------------------------------------------------------------------');
for (let i = 0; i < result.length; i++) { console.log(`${info[i]} = ${result[i]}`); } }) }

 

2、元字符解釋

元字元                               匹配物件                                                                         
.      任意一個字元
[...] 字元組 字元組內的任意一個字元
[^...] 排除字元組 排除字元組內的所有字元
\char 轉義符 轉義元字元 或 反引用
提供計數功能的元字元
+ 加號 至少一次
? 問號 匹配一次,但非必須的
* 星號 0次或多次,但非必須的
其它元字元
(...) 括號     限定或界定符,也用於反引用

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3、協議匹配規則

常見URL協議有http、https等等,所以這裡就做針對http和https的匹配。
匹配規則 :^(https?:\/\/)

 

4、主機名匹配規則

主機名格式為:xxx.xxx.xxx 或 xxx.xxx 2種形式 由字母或數字組成。
如:www.baidu.com  baidu.com  127.0.0.1
匹配規則為:([0-9a-zA-z.]+)

 

5、埠匹配

埠部分是由冒號開頭後接數值兩部分組成而且web預設埠80是不顯示在後面的,所以就有2種情況存在或不存在。
如:127.0.0.1:8080  127.0.0.0
匹配規則為:(:[0-9]+)?

 

6、路徑匹配

路徑是由字母、數字、斜槓、點組成。在訪問網站首頁時後面沒有路徑地址,所以這塊如果存在就匹配。
如:/xxx/xxxx/xxx.html 、 /xxx/xxx
匹配規則為:([/0-9a-zA-Z.]+)?

7、查詢字串匹配

查詢字串的格式為:?xxx=1&ddd=2 或 ?xx=2。由於這塊不是必須項所以在匹配時,如果存在就匹配,不存在就算了。
匹配規則為:(\?[0-9a-zA-Z&=]+)?

 

8、資訊片斷匹配

資訊片斷是由#、字母、數值組成。由於這塊不是必須項所以在匹配時,如果存在就匹配,不存在就算了。
匹配規則為:(#[0-9-a-zA-Z]+)?

 

9:其它

我的百度經驗地址:https://jingyan.baidu.com/article/a24b33cdce7a0519fe002bf9.html

程式碼分享地址:https://pan.baidu.com/s/1bE5DUP4knVa0ifDs0kNILQ