首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JS 正則提取 HTTP/HTTPS 鏈接:以空格、換行、字符串結尾為邊界的匹配模式

     編輯:程式設計綜合問答

需求分析

  • 匹配以 `https://` 或 `https://` 開頭的字符串。
  • 邊界:空格、換行 (`\n`)、字符串結尾 (`$`)。
  • 中間可為任意字符 (非貪婪)。
  • 全局匹配提取所有鏈接。

正則表達式構建


/https?:\/\/\S+/gi
  • `https?`:匹配 `http` 或 `https` (s 可選)。
  • `:\/\/`:轉義 `://`。
  • `\S+`:匹配**非空白字符** (非空格、非換行、非制表符) 一次或多次。**這天然以空白字符為邊界**。
  • `gi`:全局 (`g`) + 忽略大小寫 (`i`)。

完整代碼示例


const text = `訪問 https://example.com 頁面
或者 https://test.org/path?query=value
結尾 https://last.one`;

const regex = /https?:\/\/\S+/gi;
const matches = text.match(regex);

console.log(matches);
// 輸出: 
// [ "https://example.com", "https://test.org/path?query=value", "https://last.one" ]

邊界情況處理

輸入文本匹配結果說明
`https://a.com,https://b.com``https://a.com,https://b.com`逗號非空白,視為 URL 一部分 (可能需改進)
`https://a.com.`https://a.com.`句號非空白,包含在內 (常見問題)
`(https://a.com)``https://a.com)`括號非空白

進階:更精確的 URL 邊界 (排除尾部標點)


// 排除常見尾部標點 . , ; : ) ] } > " '
const regex = /https?:\/\/[^\s.,;:)\]>"']+/gi;
// 或使用負向前瞻
const regex2 = /https?:\/\/\S+(?=[\s.,;:)\]>"']|$)/gi;

但**完美的 URL 正則極其複雜** (RFC 3986),生產環境建議使用成熟庫 (如 `url-regex`, `linkifyjs`)。

常見錯誤修正

原回答中的代碼有誤:


// 錯誤
var re= /https?:\/\/\S+(\s|\n)/gi; 
// 會將尾部空白/換行**包含在匹配結果中**

// 正確
var re = /https?:\/\/\S+/gi; 
// \S+ 自動在空白前停止,不包含邊界字符
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved