【JavaScript】URLの解析

  • このエントリーをはてなブックマークに追加

ブラウザでのURLの解析方法はNode.jsの「WHATWG URL」と同じである。
このURLを解析するコードをNode.js v18.15.0で動かすとブラウザと同じ結果になることを確認した。





const url = 'https://user:pass@sub.example.com:8080/p/a/t/h?query=100&a=9#hash';
const myURL = new URL(url);
const whitespace = 2;
const result = [];
const names = [];

let stringLengthMax = 0;
let buf = ' ';
let blanks = '';

console.log("ブラウザでのURLの解析方法はNode.jsの「WHATWG URL」と同じである。");
console.log("このURLを解析するコードをNode.js v18.15.0で動かすとブラウザと同じ結果になることを確認した。");
console.log("");
console.log(myURL);
result.push(url);
result.push(myURL.href);
result.push(myURL.origin);
result.push(myURL.protocol);
result.push(myURL.username);
result.push(myURL.password);
result.push(myURL.host);
result.push(myURL.port);
result.push(myURL.hostname);
result.push(myURL.pathname);
result.push(myURL.hash);
result.push(myURL.search);

names.push("url");
names.push("href");
names.push("origin");
names.push("protocol");
names.push("username");
names.push("password");
names.push("host");
names.push("port");
names.push("hostname");
names.push("pathname");
names.push("hash");
names.push("search");

//names配列の中の文字列で最大長をstringLengthMaxに格納する。
names.forEach(t => {if(t.length > stringLengthMax) stringLengthMax = t.length;});

//bufに格納した文字列を「stringLengthMax + whitespace」回数分のコピーを含む新しい文字列を作る。
blanks = buf.repeat(stringLengthMax + whitespace);

//URLの解析結果を出す。
names.forEach((t, u) => (console.log(t + ':' + blanks.slice(t.length) + result[u])));

console.log("");

console.log("URLSearchParamsに含まれる値はforEach()メソッドで取り出し可能である。");
myURL.searchParams.forEach(function(value, key) {
  console.log(key + " = " + value);
});

/*

ブラウザでのURLの解析方法はNode.jsの「WHATWG URL」と同じである。
このURLを解析するコードをNode.js v18.15.0で動かすとブラウザと同じ結果になることを確認した。

URL { 
href: "https://user:pass@sub.example.com:8080/p/a/t/h?query=100&a=9#hash", 
origin: "https://sub.example.com:8080", 
protocol: "https:", 
username: "user", 
password: "pass", 
host: "sub.example.com:8080", 
hostname: "sub.example.com", 
port: "8080", 
pathname: "/p/a/t/h", 
search: "?query=100&a=9" 
}
​hash: "#hash"
host: "sub.example.com:8080"
hostname: "sub.example.com"
href: "https://user:pass@sub.example.com:8080/p/a/t/h?query=100&a=9#hash"
origin: "https://sub.example.com:8080"
password: "pass"
pathname: "/p/a/t/h"
port: "8080"
protocol: "https:"
search: "?query=100&a=9"
searchParams: URLSearchParams { query → "100", a → "9" }
username: "user"

url:       https://user:pass@sub.example.com:8080/p/a/t/h?query=100&a=9#hash
href:      https://user:pass@sub.example.com:8080/p/a/t/h?query=100&a=9#hash
origin:    https://sub.example.com:8080
protocol:  https:
username:  user
password:  pass
host:      sub.example.com:8080
port:      8080
hostname:  sub.example.com
pathname:  /p/a/t/h
hash:      #hash
search:    ?query=100&a=9

URLSearchParamsに含まれる値はforEach()メソッドで取り出し可能である。
query = 100
a = 9

*/

関連記事
【Node.js】URLの解析(「WHATWG URL」と「Legacy URL」)【2023年】 (attacktube.com)

参考
URL | Node.js v18.15.0 Documentation (nodejs.org) ExternalLink

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*