Limited availability
Experimental: ããã¯å®é¨çãªæ©è½ã§ãã
æ¬çªã§ä½¿ç¨ããåã«ãã©ã¦ã¶ã¼äºææ§ä¸è¦§è¡¨ããã§ãã¯ãã¦ãã ããã
ã¡ã¢: ãã®æ©è½ã¯ã¦ã§ãã¯ã¼ã«ã¼å ã§å©ç¨å¯è½ã§ãã
URL ãã¿ã¼ã³ API ã¯ãURLãã¿ã¼ã³ã®ãããã£ã¼ã使ããããã«ä½¿ç¨ãããæ§æãå®ç¾©ãã¾ãããããã®ãã¿ã¼ã³ã¯ã URL ã¾ãã¯åã
ã® URL ã³ã³ãã¼ãã³ãã¨ç
§åãããã¨ãã§ãã¾ãã URL ãã¿ã¼ã³ API ã¯ã URLPattern
ã¤ã³ã¿ã¼ãã§ã¼ã¹ã§ä½¿ç¨ããã¾ãã
ãã¿ã¼ã³æ§æã¯ã path-to-regexp ã©ã¤ãã©ãªã¼ã®æ§æã«åºã¥ãã¦ãã¾ãããã¿ã¼ã³ã«ã¯ä»¥ä¸ãå«ãããã¨ãã§ãã¾ãã
/posts/*
) ã¯ãä»»æã®æåã«ä¸è´ãã¾ãã/books/:id
) ã¯ãä¸è´ãã URL ã®ä¸é¨ãæ½åºãã¾ãã/books{/old}?
) ã¯ããã¿ã¼ã³ã®ä¸é¨ããªãã·ã§ã³ã«ããããè¤æ°åç
§åããããããã¨ãã§ãã¾ããRegExp
) ã°ã«ã¼ã (/books/(\\d+)
) ã¯ãããã¤ãã®å¶éä»ãã§èªç±ã«è¤éãªæ£è¦è¡¨ç¾ã®ç
§åãè¡ãã¾ãããªããæ¬å¼§ã¯æ£è¦è¡¨ç¾ã®ä¸é¨ã§ã¯ãªãããã®å
å®¹ãæ£è¦è¡¨ç¾ã¨ãã¦å®ç¾©ãã¾ããæ§æã®è©³ç´°ã¯ãä¸è¨ã®ãã¿ã¼ã³ã®æ§æã®ç¯ãåç §ãã¦ãã ããã
ã¤ã³ã¿ã¼ãã§ã¤ã¹URL ãã¿ã¼ã³ API ã«ã¯ãé¢é£ããã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯ 1 ã¤ããããã¾ããã
URLPattern
Experimental
URL ã¾ã㯠URL ã®ä¸é¨ã¨ç §åã§ãããã¿ã¼ã³ã表ç¾ãã¾ãããã¿ã¼ã³ã«ã¯ãä¸è´ãã URL ã®ä¸é¨ãæ½åºãããã£ããã£ã°ã«ã¼ããå«ãããã¨ãã§ãã¾ãã
ãã¿ã¼ã³ã®æ§æã¯ã JavaScript ã® path-to-regexp ã©ã¤ãã©ãªã¼ã«åºã¥ãã¦ãã¾ãããã®æ§æã¯ã Ruby on Rails ãã Express ã Next.js ãªã©ã® JavaScript ãã¬ã¼ã ã¯ã¼ã¯ã§ä½¿ç¨ããã¦ãããã®ã¨ä¼¼ã¦ãã¾ãã
åºå®ããã¹ãã¨ãã£ããã£ã°ã«ã¼ãåãã¿ã¼ã³ã«ã¯ãåºå®ããã¹ãã¨ã°ã«ã¼ãã®çµã¿åãããæå®ã§ãã¾ããåºå®ããã¹ãã¯ãå®å ¨ã«ä¸è´ããæååã§ããã°ã«ã¼ãã¯ãç §åã«ã¼ã«ã«åºãã¦ä»»æã®æååã¨ä¸è´ãã¾ããå URL é¨åã«ã¯ã以ä¸ã§èª¬æããç¬èªã®æ¢å®ã®ã«ã¼ã«ãè¨å®ããã¦ãã¾ããããããã¯ä¸æ¸ãã§ãã¾ãã
// åºå®ããã¹ãã¨ä¸è´ãããã¿ã¼ã³
const pattern = new URLPattern({ pathname: "/books" });
console.log(pattern.test("https://example.com/books")); // true
console.log(pattern.exec("https://example.com/books").pathname.groups); // {}
// ååä»ãã°ã«ã¼ãã使ç¨ãããã¿ã¼ã³ç
§å
const pattern = new URLPattern({ pathname: "/books/:id" });
console.log(pattern.test("https://example.com/books/123")); // true
console.log(pattern.exec("https://example.com/books/123").pathname.groups); // { id: '123' }
ç¯å²ä»ãã¯ã¤ã«ãã«ã¼ã
æ¢å®ã§ã¯ãURL ã® pathname
é¨åã¨ä¸è´ããã°ã«ã¼ãã¯ãã¹ã©ãã·ã¥ (/
) 以å¤ã®ãã¹ã¦ã®æåã¨ä¸è´ãã¾ãã hostname
é¨åã§ã¯ãã°ã«ã¼ãã¯ããã (.
) 以å¤ã®ãã¹ã¦ã®æåã¨ä¸è´ãã¾ãããã®ä»ã®é¨åã§ã¯ãã°ã«ã¼ãã¯ãã¹ã¦ã®æåã¨ä¸è´ãã¾ããã»ã°ã¡ã³ãã¯ã¤ã«ãã«ã¼ãã¯è²ªæ¬²ã§ã¯ãªããããå¯è½ãªéãçãæååã¨ä¸è´ãã¾ãã
ã°ã«ã¼ãã®æ¢å®ã®ç §åã«ã¼ã«ã使ç¨ãã代ããã«ãæ¬å¼§ã§å²ãã æ£è¦è¡¨ç¾ã使ç¨ãã¦ãåã°ã«ã¼ãã«æ£è¦è¡¨ç¾ã使ç¨ãããã¨ãã§ãã¾ãããã®æ£è¦è¡¨ç¾ã¯ãã°ã«ã¼ãã«å¯¾ããç §åã«ã¼ã«ãå®ç¾©ãã¾ãã以ä¸ã¯ã1 ã¤ä»¥ä¸ã®æ°åãå«ãå ´åã«ã®ã¿ã°ã«ã¼ãã«ä¸è´ããããã«å¶éãããååä»ãã°ã«ã¼ãã«å¯¾ããæ£è¦è¡¨ç¾ãããã£ã¼ã®ä¾ã§ãã
const pattern = new URLPattern("/books/:id(\\d+)", "https://example.com");
console.log(pattern.test("https://example.com/books/123")); // true
console.log(pattern.test("https://example.com/books/abc")); // false
console.log(pattern.test("https://example.com/books/")); // false
æ£è¦è¡¨ç¾ãããã£ã¼ã®å¶é
ä¸é¨ã®æ£è¦è¡¨ç¾ãã¿ã¼ã³ã¯ãæå¾ ã©ããã«æ©è½ãã¾ããã
^
ã§å§ã¾ããã¿ã¼ã³ã¯ã URLPattern ã®ãããã³ã«é¨åã§æåã«ä½¿ç¨ãããå ´åã«ã®ã¿ä¸è´ãã¾ãã
// ãã¹åã« `^` ãã
const pattern = new URLPattern({ pathname: "(^b)" });
console.log(pattern.test("https://example.com/ba")); // false
console.log(pattern.test("https://example.com/xa")); // false
// ãããã³ã«ã« `^` ãã
const pattern = new URLPattern({ protocol: "(^https?)" });
console.log(pattern.test("https://example.com/index.html")); // true
console.log(pattern.test("xhttps://example.com/index.html")); // false
// ãããã³ã«ã« `^` ãªã
const pattern = new URLPattern({ protocol: "(https?)" });
console.log(pattern.test("https://example.com/index.html")); // true
console.log(pattern.test("xhttps://example.com/index.html")); // false
$
ã§çµãããã®ã¯ã URLPattern ã®ããã·ã¥é¨åã§æå¾ã«ä½¿ç¨ãããå ´åã«ã®ã¿ä¸è´ãã¾ãã使ç¨ãã¦ãåé·ã§ãã
// ãã¹åã« `$` ãã
const pattern = new URLPattern({ pathname: "(path$)" });
console.log(pattern.test("https://example.com/path")); // false
console.log(pattern.test("https://example.com/other")); // false
// ããã·ã¥ã« `$` ãã
const pattern = new URLPattern({ hash: "(hash$)" });
console.log(pattern.test("https://example.com/#hash")); // true
console.log(pattern.test("xhttps://example.com/#otherhash")); // false
// ããã·ã¥ã« `$` ãªã
const pattern = new URLPattern({ hash: "(hash)" });
console.log(pattern.test("https://example.com/#hash")); // true
console.log(pattern.test("xhttps://example.com/#otherhash")); // false
å èªã¿ããã³å¾èªã¿ã¯ã URLPattern ã®ã©ã®é¨åã¨ãä¸è´ãããã¨ã¯ããã¾ããã
// å
èªã¿
const pattern = new URLPattern({ pathname: "(a(?=b))" });
console.log(pattern.test("https://example.com/ab")); // false
console.log(pattern.test("https://example.com/ax")); // false
// å
èªã¿å¦å®
const pattern = new URLPattern({ pathname: "(a(?!b))" });
console.log(pattern.test("https://example.com/ab")); // false
console.log(pattern.test("https://example.com/ax")); // false
// å¾èªã¿
const pattern = new URLPattern({ pathname: "((?<=b)a)" });
console.log(pattern.test("https://example.com/ba")); // false
console.log(pattern.test("https://example.com/xa")); // false
// å¾èªã¿å¦å®
const pattern = new URLPattern({ pathname: "((?<!b)a)" });
console.log(pattern.test("https://example.com/ba")); // false
console.log(pattern.test("https://example.com/xa")); // false
URLPattern å ã®ç¯å²å¼ã§ã¯ãæ£è¦è¡¨ç¾ã§ã¯ã¨ã¹ã±ã¼ãããå¿ è¦ã®ãªãæ¬å¼§ãã¨ã¹ã±ã¼ãããå¿ è¦ãããã¾ãã
new URLPattern({ pathname: "([()])" }); // ä¾å¤
new URLPattern({ pathname: "([\\(\\)])" }); // ok
new RegExp("[()]"); // ok
new RegExp("[\\(\\)]"); // ok
ã°ã«ã¼ãã«ã¯ååãã¤ãããã¨ããã¤ããªããã¨ãã§ãã¾ããååä»ãã°ã«ã¼ãã¯ãã°ã«ã¼ãåã®åã«ã³ãã³ (:) ãä»ãã¦æå®ãã¾ããã³ãã³ã¨ååã§æ¥é è¾ãä»ãããã¦ããªãæ£è¦è¡¨ç¾ã°ã«ã¼ãã¯ãååãªãã°ã«ã¼ãã¨ãªãã¾ããååãªãã°ã«ã¼ãã¯ããã¿ã¼ã³å ã®é åºã«åºã¥ãã¦ãä¸è´çµæã«çªå·ãå²ãå½ã¦ããã¾ãã
// ååä»ãã°ã«ã¼ã
const pattern = new URLPattern("/books/:id(\\d+)", "https://example.com");
console.log(pattern.exec("https://example.com/books/123").pathname.groups); // { id: '123' }
// ç¡åã°ã«ã¼ã
const pattern = new URLPattern("/books/(\\d+)", "https://example.com");
console.log(pattern.exec("https://example.com/books/123").pathname.groups); // { '0': '123' }
ã°ã«ã¼ã修飾å
ã°ã«ã¼ãã«ã¯ä¿®é£¾åãæå®ã§ãã¾ãããããã¯ã°ã«ã¼ãåï¼ã¾ãã¯æ£è¦è¡¨ç¾ãããå ´åã¯ãã®å¾ã«ï¼ã«æå®ãã¾ãã修飾å㯠3 種é¡ããã¾ãã ?
ã¯ã°ã«ã¼ãããªãã·ã§ã³ã«ãã¾ãã +
ã¯ã°ã«ã¼ãã 1 å以ä¸ç¹°ãè¿ãã¾ãã *
ã¯ã°ã«ã¼ãã 0 å以ä¸ç¹°ãè¿ãã¾ãã
// ä»»æã®ã°ã«ã¼ã
const pattern = new URLPattern("/books/:id?", "https://example.com");
console.log(pattern.test("https://example.com/books/123")); // true
console.log(pattern.test("https://example.com/books")); // true
console.log(pattern.test("https://example.com/books/")); // false
console.log(pattern.test("https://example.com/books/123/456")); // false
console.log(pattern.test("https://example.com/books/123/456/789")); // false
// æä½ 1 ã¤ãå«ãç¹°ãè¿ãã°ã«ã¼ã
const pattern = new URLPattern("/books/:id+", "https://example.com");
console.log(pattern.test("https://example.com/books/123")); // true
console.log(pattern.test("https://example.com/books")); // false
console.log(pattern.test("https://example.com/books/")); // false
console.log(pattern.test("https://example.com/books/123/456")); // true
console.log(pattern.test("https://example.com/books/123/456/789")); // true
// æä½ 0 ã®ç¹°ãè¿ãã°ã«ã¼ã
const pattern = new URLPattern("/books/:id*", "https://example.com");
console.log(pattern.test("https://example.com/books/123")); // true
console.log(pattern.test("https://example.com/books")); // true
console.log(pattern.test("https://example.com/books/")); // false
console.log(pattern.test("https://example.com/books/123/456")); // true
console.log(pattern.test("https://example.com/books/123/456/789")); // true
ã°ã«ã¼ãåºåãæå
ãã¿ã¼ã³ã«ã¯ã°ã«ã¼ãåºåãæåãå«ã¾ãããã¨ãããã¾ãããããã¯ãæ³¢æ¬å¼§ ({}
) ã§å²ã¾ãããã¿ã¼ã³ã®é¨åã§ãããããã®ã°ã«ã¼ãåºåãæåã¯ããã£ããã£ã°ã«ã¼ãã®ããã«ä¸è´çµæã«ã¯ãã£ããã£ããã¾ããããã°ã«ã¼ãã¨åæ§ã«ä¿®é£¾åãé©ç¨ãããã¨ãã§ãã¾ããã°ã«ã¼ãåºåãæåã修飾åã«ãã£ã¦ä¿®é£¾ããã¦ããªãå ´åããã®ä¸ã®é
ç®ã¯è¦ªãã¿ã¼ã³ã®ä¸é¨ã¨ãã¦æ±ããã¾ããã°ã«ã¼ãåºåãè¨å·ã¯ä»ã®ã°ã«ã¼ãåºåãè¨å·ãå«ãããã¨ã¯ã§ãã¾ããããä»ã®ãã¿ã¼ã³è¦ç´ ï¼ãã£ããã£ã°ã«ã¼ããæ£è¦è¡¨ç¾ãã¯ã¤ã«ãã«ã¼ããåºå®ããã¹ããªã©ï¼ãå«ãããã¨ãã§ãã¾ãã
// ? ï¼ãªãã·ã§ã³ï¼ä¿®é£¾åã®ä»ããã°ã«ã¼ãåºåãæå
const pattern = new URLPattern("/book{s}?", "https://example.com");
console.log(pattern.test("https://example.com/books")); // true
console.log(pattern.test("https://example.com/book")); // true
console.log(pattern.exec("https://example.com/books").pathname.groups); // {}
// 修飾åã®ãªãã°ã«ã¼ãåºåãæå
const pattern = new URLPattern("/book{s}", "https://example.com");
console.log(pattern.pathname); // /books
console.log(pattern.test("https://example.com/books")); // true
console.log(pattern.test("https://example.com/book")); // false
// ãã£ããã£ã°ã«ã¼ãå
ã®ã°ã«ã¼ãåºåãæå
const pattern = new URLPattern({ pathname: "/blog/:id(\\d+){-:title}?" });
console.log(pattern.test("https://example.com/blog/123-my-blog")); // true
console.log(pattern.test("https://example.com/blog/123")); // true
console.log(pattern.test("https://example.com/blog/my-blog")); // false
ãã¹åã¸ã®ã°ã«ã¼ãæ¥é è¾ã®èªåä»å
URL ã® pathname é¨åã¨ä¸è´ãããã¿ã¼ã³ã§ã¯ãã°ã«ã¼ãå®ç¾©ã®åã«ã¹ã©ãã·ã¥ (/
) ãä»ãã¦ããå ´åãã°ã«ã¼ãã«ã¯èªåçã«ã¹ã©ãã·ã¥ (/
) ãæ¥é è¾ã¨ãã¦è¿½å ããã¾ããããã¯ã修飾åãæã¤ã°ã«ã¼ãã§ãç¹°ãè¿ãã°ã«ã¼ããæå¾
ã©ããã«æ©è½ããããã«ããããã«å½¹ç«ã¡ã¾ãã
èªåæ¥é è¾ã追å ããããªãå ´åã¯ãã°ã«ã¼ããã°ã«ã¼ãåºåãæå ({}
) ã§å²ããã¨ã§ç¡å¹ã«ãããã¨ãã§ãã¾ããã°ã«ã¼ãåºåãæåã«ã¯ãèªåæ¥é è¾ã®æ©è½ã¯ããã¾ããã
// ã¹ã©ãã·ã¥ã§å§ã¾ãããªãã·ã§ã³ã®ã°ã«ã¼ããå«ããã¿ã¼ã³
const pattern = new URLPattern("/books/:id?", "https://example.com");
console.log(pattern.test("https://example.com/books/123")); // true
console.log(pattern.test("https://example.com/books")); // true
console.log(pattern.test("https://example.com/books/")); // false
// ã¹ã©ãã·ã¥ã§å§ã¾ããç¹°ãè¿ãã®ã°ã«ã¼ããå«ããã¿ã¼ã³
const pattern = new URLPattern("/books/:id+", "https://example.com");
console.log(pattern.test("https://example.com/books/123")); // true
console.log(pattern.test("https://example.com/books/123/456")); // true
console.log(pattern.test("https://example.com/books/123/")); // false
console.log(pattern.test("https://example.com/books/123/456/")); // false
// ã»ã°ã¡ã³ãã®æ¥é è¾ã¯ããã¹åãã¿ã¼ã³ä»¥å¤ã§ã¯çºçããªã
const pattern = new URLPattern({ hash: "/books/:id?" });
console.log(pattern.test("https://example.com#/books/123")); // true
console.log(pattern.test("https://example.com#/books")); // false
console.log(pattern.test("https://example.com#/books/")); // true
// ã°ã«ã¼ãåºåãæåã使ç¨ãã¦ãã°ã«ã¼ãã«å¯¾ãã¦ã»ã°ã¡ã³ãæ¥é è¾ãç¡å¹ã«ãã
const pattern = new URLPattern({ pathname: "/books/{:id}?" });
console.log(pattern.test("https://example.com/books/123")); // true
console.log(pattern.test("https://example.com/books")); // false
console.log(pattern.test("https://example.com/books/")); // true
ã¯ã¤ã«ãã«ã¼ããã¼ã¯ã³
ã¯ã¤ã«ãã«ã¼ããã¼ã¯ã³ (*
) ã¯ã0 å以ä¸ãã¹ã¦ã®æåã«ä¸è´ãããååãªãã®ãã£ããã£ã°ã«ã¼ãã表ãçç¥å½¢ã§ããããã¯ãã¿ã¼ã³ã®ã©ãã«ã§ãé
ç½®ã§ãã¾ããã¯ã¤ã«ãã«ã¼ãã¯è²ªæ¬²ã§ãããå¯è½ãªéãé·ãæååã«ä¸è´ãã¾ãã
// ãã¿ã¼ã³ã®æ«å°¾ã®ã¯ã¤ã«ãã«ã¼ã
const pattern = new URLPattern("/books/*", "https://example.com");
console.log(pattern.test("https://example.com/books/123")); // true
console.log(pattern.test("https://example.com/books")); // false
console.log(pattern.test("https://example.com/books/")); // true
console.log(pattern.test("https://example.com/books/123/456")); // true
// ãã¿ã¼ã³ã®ä¸éã«ããã¯ã¤ã«ãã«ã¼ã
const pattern = new URLPattern("/*.png", "https://example.com");
console.log(pattern.test("https://example.com/image.png")); // true
console.log(pattern.test("https://example.com/image.png/123")); // false
console.log(pattern.test("https://example.com/folder/image.png")); // true
console.log(pattern.test("https://example.com/.png")); // true
ãã¿ã¼ã³ã®æ£è¦å
ãã¿ã¼ã³ãè§£éãããã¨ãèªåçã«æ£è¦å½¢ã«æ£è¦åããã¾ããä¾ãã°ããã¹åããããã£ã§ã¯ Unicode æåã¯ãã¼ã»ã³ãã¨ã³ã³ã¼ãããããã¹ãåã§ã¯ Punycode ã¨ã³ã³ã¼ãã使ç¨ãããæ¢å®ã®ãã¼ãçªå·ã¯çç¥ããã /foo/./bar/
ã®ãããªãã¹ã¯ /foo/bar
ã«ç縮ããã¾ããããã«ã foo
㨠{foo}
ã®ããã«ãåãæå³ã«è§£éããããã¿ã¼ã³è¡¨ç¾ãããã¤ãããã¾ãããã®ãããªå ´åã¯ãæãåç´ãªå½¢ã«æ£è¦åããã¾ãããã®å ´åã {foo}
㯠foo
ã«å¤æ´ããã¾ãã
URL ãã¿ã¼ã³ API ã¯ãç
§åæã« URL ã®å¤ãã®é¨åãæ¢å®ã§å¤§æåã¨å°æåãåºå¥ãã¾ããããã¨ã¯å¯¾ç
§çã«ãå¤ãã®ã¯ã©ã¤ã¢ã³ãå´ã® JavaScript ãã¬ã¼ã ã¯ã¼ã¯ã§ã¯ã大æåã¨å°æåãåºå¥ããªã URL ç
§åã使ç¨ããã¾ããå¿
è¦ã«å¿ãã¦ã大æåã¨å°æåãåºå¥ããªãç
§åãæå¹ã«ãã ignoreCase
ãªãã·ã§ã³ã URLPattern()
ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ä½¿ç¨ã§ãã¾ãã
// æ¢å®ã§ã¯å¤§æåå°æåãåºå¥ããç
§å
const pattern = new URLPattern("https://example.com/2022/feb/*");
console.log(pattern.test("https://example.com/2022/feb/xc44rsz")); // true
console.log(pattern.test("https://example.com/2022/Feb/xc44rsz")); // false
ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ ignoreCase
ãªãã·ã§ã³ã true
ã«è¨å®ããã¨ãæå®ããããã¿ã¼ã³ã«å¯¾ãã¦ããã¹ã¦ã®ä¸è´æä½ã大æåã¨å°æåãåºå¥ããªãããã«åãæ¿ããã¾ãã
// 大æåå°æåãåºå¥ããªãç
§å
const pattern = new URLPattern("https://example.com/2022/feb/*", {
ignoreCase: true,
});
console.log(pattern.test("https://example.com/2022/feb/xc44rsz")); // true
console.log(pattern.test("https://example.com/2022/Feb/xc44rsz")); // true
ä¾ ç¹å®ã® URL æåã§ã®ãã£ã«ã¿ãªã³ã°
次ã®ä¾ã¯ã URLPattern
ãç¹å®ã® URL æåããã£ã«ã¿ã¼ããæ¹æ³ã示ãã¦ãã¾ããURLPattern()
ã³ã³ã¹ãã©ã¯ã¿ã¼ããæåã®ãã¿ã¼ã³ã®æ§é åãªãã¸ã§ã¯ãã§å¼ã³åºãããã¨ãæ¬ è½ãã¦ããæåã¯ãæ¢å®ã§ *
ã¯ã¤ã«ãã«ã¼ãå¤ã«ãªãã¾ãã
// ç¹å®ã®ãã¡ã¤ã³ã¨ãã®ãµããã¡ã¤ã³ã«ä¸è´ãã URLPattern ãæ§ç¯ãã
// ãã以å¤ã®ãã¹ã¦ã® URL è¦ç´ ã¯ãæ¢å®ã§ã¯ã¤ã«ãã«ã¼ã `*` ãã¿ã¼ã³ã«ãªã
const pattern = new URLPattern({
hostname: "{*.}?example.com",
});
console.log(pattern.hostname); // '{*.}?example.com'
console.log(pattern.protocol); // '*'
console.log(pattern.username); // '*'
console.log(pattern.password); // '*'
console.log(pattern.pathname); // '*'
console.log(pattern.search); // '*'
console.log(pattern.hash); // '*'
console.log(pattern.test("https://example.com/foo/bar")); // true
console.log(pattern.test({ hostname: "cdn.example.com" })); // true
console.log(pattern.test("custom-protocol://example.com/other/path?q=1")); // false
// ãã¹ãåè¦ç´ ãä¸è´ããªãããã`false` ãåºåããã
console.log(pattern.test("https://cdn-example.com/foo/bar"));
å®å
¨ãª URL æååãã URLPattern ãæ§ç¯
次ã®ä¾ã¯ããã¿ã¼ã³ãåãè¾¼ã¾ããå®å
¨ãª URL æååãã URLPattern
ãæ§ç¯ããæ¹æ³ã示ãã¦ãã¾ããä¾ãã° :
ã¯ã https:
ã®ããã« URL ãããã³ã«ã®æ¥å°¾è¾ã¨ãã¦ãã :foo
ã®ããã«ååä»ããã¿ã¼ã³ã°ã«ã¼ãã®å
é ã¨ãã¦ã使ç¨ã§ãã¾ããæåã URL æ§æã®ä¸é¨ã§ãããããã¿ã¼ã³æ§æã®ä¸é¨ã§ããããæç¢ºã§ããã°ãããã¯ããã®ã¾ã¾åä½ããã¾ãã
// jpg ç»åãèªã¿è¾¼ã CDN ãµã¼ãã¼ã® URL ã¨ä¸è´ãã URLPattern ãæ§ç¯ãã¾ãã
// æ¤ç´¢ãããã·ã¥ã®ããã«æç¤ºçã«æå®ããã¦ããªã URL æåã¯ã
// URL() ã³ã³ã¹ãã©ã¯ã¿ã¼ã¨åæ§ã«ç©ºæååã«ãªã
const pattern = new URLPattern("https://cdn-*.example.com/*.jpg");
console.log(pattern.protocol); // 'https'
console.log(pattern.hostname); // 'cdn-*.example.com'
console.log(pattern.pathname); // '/*.jpg'
console.log(pattern.username); // ''
console.log(pattern.password); // ''
console.log(pattern.search); // ''
console.log(pattern.hash); // ''
// `true` ã¨è¡¨ç¤º
console.log(
pattern.test("https://cdn-1234.example.com/product/assets/hero.jpg"),
);
// æ¤ç´¢è¦ç´ ãä¸è´ããªãããã`false` ãåºåããã
console.log(
pattern.test("https://cdn-1234.example.com/product/assets/hero.jpg?q=1"),
);
ææ§ãª URL æååã使ç¨ã㦠URLPattern ãæ§ç¯
次ã®ä¾ã¯ãææ§ãªæååããæ§ç¯ããã URLPattern
ããæåããã¿ã¼ã³æ§æã®ä¸é¨ã¨ãã¦æ±ããã¨ãåªå
ããæ¹æ³ã示ãã¦ãã¾ãããã®å ´åã :
æåã¯ãããã³ã«è¦ç´ ã®ãµãã£ãã¯ã¹ã§ããå ´åãããã°ããã¿ã¼ã³å
ã®ååä»ãã°ã«ã¼ãã®æ¥é è¾ã§ããå ´åãããã¾ããã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ãããããã¿ã¼ã³ã®ä¸é¨ã¨ãã¦æ±ããã¨ã鏿ãããããã£ã¦ããããç¸å¯¾ãã¹åãã¿ã¼ã³ã§ããã¨å¤æãã¾ãããã¼ã¹ URL ããªããããç¸å¯¾ãã¹åã¯è§£æ±ºã§ãããã¨ã©ã¼ãçºçãã¾ãã
// ããã¯ãååä»ãã°ã«ã¼ã ":foo" ãæã¤åä¸ã®ç¸å¯¾ãã¹åãã¿ã¼ã³ã¨ãã¦
// è§£éããããã¼ã¹ URL ããªããããä¾å¤ãçºçãã¾ãã
const pattern = new URLPattern("data:foo*");
URLPattern ã³ã³ã¹ãã©ã¯ã¿ã¼æååã®ææ§ããåé¿ããããã®ã¨ã¹ã±ã¼ãæå
次ã®ä¾ã¯ãææ§ãªã³ã³ã¹ãã©ã¯ã¿ã¼æååæåãã¨ã¹ã±ã¼ããã¦ããã¿ã¼ã³æåã§ã¯ãªã URL ã®åºåãæåã¨ãã¦æ±ãæ¹æ³ã示ãã¦ãã¾ããããã§ã¯ã :
㯠\\:
ã¨ã¨ã¹ã±ã¼ãããã¦ãã¾ãã
// `:` ããããã³ã«æ¥å°¾è¾ã¨ãã¦æ±ã URLPattern ãæ§ç¯ãã¾ãã
const pattern = new URLPattern("data\\:foo*");
console.log(pattern.protocol); // 'data'
console.log(pattern.pathname); // 'foo*'
console.log(pattern.username); // ''
console.log(pattern.password); // ''
console.log(pattern.hostname); // ''
console.log(pattern.port); // ''
console.log(pattern.search); // ''
console.log(pattern.hash); // ''
console.log(pattern.test("data:foobar")); // true
test() 㨠exec() ã®ãã¼ã¹ URL ã®ä½¿ç¨
次ã®ä¾ã¯ãtest()
ããã³ exec()
ããã¼ã¹ URL ã使ç¨ã§ãããã¨ã示ãã¦ãã¾ãã
const pattern = new URLPattern({ hostname: "example.com", pathname: "/foo/*" });
// è¾æ¸ `baseURL` ããããã£ã¨ä¸è´ãããã¹ãåã¨ã㦠`true` ãåºåããã¾ãã
console.log(
pattern.test({
pathname: "/foo/bar",
baseURL: "https://example.com/baz",
}),
);
// 2 ã¤ç®ã®å¼æ° base URL ã¨ä¸è´ãããã¹ãåã¨ã㦠`true` ãåºåããã¾ãã
console.log(pattern.test("/foo/bar", "https://example.com/baz"));
// 2 ã¤ç®ã®å¼æ°ã¯è¾æ¸å
¥åã§ã¯æ¸¡ããã¨ãã§ããªããããä¾å¤ãçºçãã¾ãã
try {
pattern.test({ pathname: "/foo/bar" }, "https://example.com/baz");
} catch (e) {}
// `exec()` ã¡ã½ããã¯ã`test()` ã¨åã弿°ãåãã¾ãã
const result = pattern.exec("/foo/bar", "https://example.com/baz");
console.log(result.pathname.input); // '/foo/bar'
console.log(result.pathname.groups[0]); // 'bar'
console.log(result.hostname.input); // 'example.com'
URLPattern ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ã®ãã¼ã¹ URL ã®ä½¿ç¨
次ã®ä¾ã¯ããã¼ã¹ URL ã使ç¨ã㦠URLPattern
ãæ§ç¯ããæ¹æ³ã示ãã¦ãã¾ãããã®å ´åããã¼ã¹ URL ã¯å³å¯ã« URL ã¨ãã¦æ±ããããã¿ã¼ã³æ§æèªä½ãå«ããã¨ã¯ã§ãã¾ããã
ã¾ãããã¼ã¹ URL ã¯ãã¹ã¦ã®è¦ç´ ã®å¤ãæä¾ãããããçµæã® URLPattern
ãããã¨ãããã空æååã§ãã£ã¦ãããã¹ã¦ã®è¦ç´ ã®å¤ãæã¤ãã¨ã«ãªãã¾ããã¤ã¾ãããã¯ã¤ã«ãã«ã¼ããæ¢å®å¤ã¨ãããã¨ããåä½ã¯çºçãã¾ããã
const pattern1 = new URLPattern({
pathname: "/foo/*",
baseURL: "https://example.com",
});
console.log(pattern1.protocol); // 'https'
console.log(pattern1.hostname); // 'example.com'
console.log(pattern1.pathname); // '/foo/*'
console.log(pattern1.username); // ''
console.log(pattern1.password); // ''
console.log(pattern1.port); // ''
console.log(pattern1.search); // ''
console.log(pattern1.hash); // ''
// pattern1 ã¨åç
const pattern2 = new URLPattern("/foo/*", "https://example.com");
// ã³ã³ã¹ãã©ã¯ã¿ã¼ã«ãããç¸å¯¾æååã¯ã解決ããããã®ãã¼ã¹ URL ã
// æå®ããå¿
è¦ãããã¾ãã
try {
const pattern3 = new URLPattern("/foo/*");
} catch (e) {}
ä¸è´ããã°ã«ã¼ãã®å¤ã¸ã®ã¢ã¯ã»ã¹
次ã®ä¾ã¯ããã¿ã¼ã³ã°ã«ã¼ãã¨ä¸è´ããå
¥åå¤ããå¾ã§ exec()
ã®çµæãªãã¸ã§ã¯ãããã¢ã¯ã»ã¹ããæ¹æ³ã示ãã¦ãã¾ããååããªãã°ã«ã¼ãã«ã¯ãé çªã«ã¤ã³ããã¯ã¹çªå·ãå²ãå½ã¦ããã¾ãã
const pattern = new URLPattern({ hostname: "*.example.com" });
const result = pattern.exec({ hostname: "cdn.example.com" });
console.log(result.hostname.groups[0]); // 'cdn'
console.log(result.hostname.input); // 'cdn.example.com'
console.log(result.inputs); // [{ hostname: 'cdn.example.com' }]
ã«ã¹ã¿ã åã使ç¨ãã¦ä¸è´ããã°ã«ã¼ãã®å¤ã«ã¢ã¯ã»ã¹
次ã®ä¾ã¯ãã°ã«ã¼ãã«ãçµæãªãã¸ã§ã¯ãã®ä¸è´ããå¤ã«ã¢ã¯ã»ã¹ããããã«ä½¿ç¨ã§ããã«ã¹ã¿ã åãä»ããæ¹æ³ã示ãã¦ãã¾ãã
// ã«ã¹ã¿ã åãæã¤ç
§åã°ã«ã¼ãã使ç¨ã㦠URLPattern ãæ§ç¯ãã¾ãã
// ãããã®ååã¯ãå¾ã§çµæãªãã¸ã§ã¯ãã®ä¸è´ããå¤ã«ã¢ã¯ã»ã¹ããããã«
// 使ç¨ãããã¨ãã§ãã¾ãã
const pattern = new URLPattern({ pathname: "/:product/:user/:action" });
const result = pattern.exec({ pathname: "/store/wanderview/view" });
console.log(result.pathname.groups.product); // 'store'
console.log(result.pathname.groups.user); // 'wanderview'
console.log(result.pathname.groups.action); // 'view'
console.log(result.pathname.input); // '/store/wanderview/view'
console.log(result.inputs); // [{ pathname: '/store/wanderview/view' }]
ç¬èªã®æ£è¦è¡¨ç¾ã°ã«ã¼ã
次ã®ä¾ã¯ãç §åã°ã«ã¼ãã§ç¬èªã®æ£è¦è¡¨ç¾ã使ç¨ããä¾ã示ãã¾ãã
const pattern = new URLPattern({ pathname: "/(foo|bar)" });
console.log(pattern.test({ pathname: "/foo" })); // true
console.log(pattern.test({ pathname: "/bar" })); // true
console.log(pattern.test({ pathname: "/baz" })); // false
const result = pattern.exec({ pathname: "/foo" });
console.log(result.pathname.groups[0]); // 'foo'
ç¬èªã®æ£è¦è¡¨ç¾ã使ç¨ããååä»ãã°ã«ã¼ã
次ã®ä¾ã¯ãååä»ãã°ã«ã¼ãã§ç¬èªã®æ£è¦è¡¨ç¾ã使ç¨ããæ¹æ³ã示ãã¦ãã¾ãã
const pattern = new URLPattern({ pathname: "/:type(foo|bar)" });
const result = pattern.exec({ pathname: "/foo" });
console.log(result.pathname.groups.type); // 'foo'
ã°ã«ã¼ãã®ç§°å·ããªãã·ã§ã³ã«ãã
次ã®ä¾ã¯ã ?
修飾åããã®å¾ã«ç½®ããã¨ã§ãç
§åã°ã«ã¼ãããªãã·ã§ã³ã«ããæ¹æ³ã示ãã¦ãã¾ãããã¹åè¦ç´ ã®å ´åãããã«ããããã®åã«ãã /
æåãããã®ã°ã«ã¼ãã®ãªãã·ã§ã³ã®æ¥é è¾ã¨ãã¦æ±ãããããã«ãªãã¾ãã
const pattern = new URLPattern({ pathname: "/product/(index.html)?" });
console.log(pattern.test({ pathname: "/product/index.html" })); // true
console.log(pattern.test({ pathname: "/product" })); // true
const pattern2 = new URLPattern({ pathname: "/product/:action?" });
console.log(pattern2.test({ pathname: "/product/view" })); // true
console.log(pattern2.test({ pathname: "/product" })); // true
// ã¯ã¤ã«ãã«ã¼ãããªãã·ã§ã³ã«ãããã¨ãã§ãã¾ããã¯ã¤ã«ãã«ã¼ãã¯
// 空æååã¨ä¸è´ããã®ã§ãããã¯æå³ããªãããã«è¦ããããããã¾ãããã
// ããã«ããããã¹åãã¿ã¼ã³ã§æ¥é è¾ `/` ããªãã·ã§ã³ã«ãªãã¾ãã
const pattern3 = new URLPattern({ pathname: "/product/*?" });
console.log(pattern3.test({ pathname: "/product/wanderview/view" })); // true
console.log(pattern3.test({ pathname: "/product" })); // true
console.log(pattern3.test({ pathname: "/product/" })); // true
ç
§åããã°ã«ã¼ããç¹°ãè¿ã
次ã®ä¾ã¯ãä¸è´ããã°ã«ã¼ãããã®å¾ã« +
修飾åãç½®ããã¨ã§ç¹°ãè¿ã表示ãããæ¹æ³ã示ãã¦ãã¾ãããã¹åè¦ç´ ã§ã¯ããã㯠/
æ¥é è¾ãç¹å¥ãªãã®ã¨ãã¦æ±ãã¾ããããã¯ã°ã«ã¼ãã¨ã¨ãã«ç¹°ãè¿ããã¾ãã
const pattern = new URLPattern({ pathname: "/product/:action+" });
const result = pattern.exec({ pathname: "/product/do/some/thing/cool" });
result.pathname.groups.action; // 'do/some/thing/cool'
console.log(pattern.test({ pathname: "/product" })); // false
ç
§åããã°ã«ã¼ãããªãã·ã§ã³ã«ããç¹°ãè¿ã
次ã®ä¾ã¯ããªãã·ã§ã³ã§ããããã¤ç¹°ãè¿ãå¯è½ãªç
§åã°ã«ã¼ãã使ããæ¹æ³ã示ãã¦ãã¾ãããããè¡ãã«ã¯ãã°ã«ã¼ãã®å¾ã« *
修飾å ãé
ç½®ãã¾ããããã§ãããã¹åè¦ç´ 㯠/
æ¥é è¾ãç¹å¥ãªãã®ã¨ãã¦æ±ãã¾ããããã¯ãªãã·ã§ã³ã«ãªããã°ã«ã¼ãã¨ã¨ãã«ç¹°ãè¿ãè¡ããã¾ãã
const pattern = new URLPattern({ pathname: "/product/:action*" });
const result = pattern.exec({ pathname: "/product/do/some/thing/cool" });
console.log(result.pathname.groups.action); // 'do/some/thing/cool'
console.log(pattern.test({ pathname: "/product" })); // true
ãªãã·ã§ã³ã¾ãã¯ç¹°ãè¿ã修飾åã«ç¬èªã®æ¥é è¾ã¾ãã¯æ¥å°¾è¾ã使ç¨
次ã®ä¾ã¯ã䏿¬å¼§ã使ç¨ãã¦ãå¾ç¶ã® ?
ã*
ã+
ã®ããããã®ä¿®é£¾åã«ãã£ã¦æä½ãããç¬èªã®æ¥é è¾ãæ¥å°¾è¾ãæå®ããæ¹æ³ã示ãã¦ãã¾ãã
const pattern = new URLPattern({ hostname: "{:subdomain.}*example.com" });
console.log(pattern.test({ hostname: "example.com" })); // true
console.log(pattern.test({ hostname: "foo.bar.example.com" })); // true
console.log(pattern.test({ hostname: ".example.com" })); // false
const result = pattern.exec({ hostname: "foo.bar.example.com" });
console.log(result.hostname.groups.subdomain); // 'foo.bar'
ç
§åã°ã«ã¼ããªãã§ããã¹ãããªãã·ã§ã³ã¾ãã¯ç¹°ãè¿ãã«ãã
次ã®ä¾ã¯ã䏿¬å¼§ã使ç¨ãã¦ãç §åã°ã«ã¼ãã使ç¨ããã«ãä¿®æ£ãããããã¹ãå¤ããªãã·ã§ã³ã¾ãã¯ç¹°ãè¿ãã¨ãã¦ç¤ºãæ¹æ³ã示ãã¦ãã¾ãã
const pattern = new URLPattern({ pathname: "/product{/}?" });
console.log(pattern.test({ pathname: "/product" })); // true
console.log(pattern.test({ pathname: "/product/" })); // true
const result = pattern.exec({ pathname: "/product/" });
console.log(result.pathname.groups); // {}
è¤æ°ã®ã³ã³ãã¼ãã³ãããã³æ©è½ãåæã«ä½¿ç¨
次ã®ä¾ã¯ãè¤æ°ã® URL æåéã§çµã¿åããããã¨ãã§ããæ¹æ³ã示ãã¦ãã¾ãã
const pattern = new URLPattern({
protocol: "http{s}?",
username: ":user?",
password: ":pass?",
hostname: "{:subdomain.}*example.com",
pathname: "/product/:action*",
});
const result = pattern.exec(
"http://foo:bar@sub.example.com/product/view?q=12345",
);
console.log(result.username.groups.user); // 'foo'
console.log(result.password.groups.pass); // 'bar'
console.log(result.hostname.groups.subdomain); // 'sub'
console.log(result.pathname.groups.action); // 'view'
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
URLPattern
ã®ããªãã£ã«ã GitHub ã«ããã¾ãRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4