【JavaScript】URLにマッチする正規表現

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

URLからurl、scheme、slash、host、port、path、query、hashを正規表現を使って抜き出す。
これはstring.match(regexp)とregexp.exec(string)を使用すると実現できる。


const whitespace = 1;
const parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
const url = "http://www.ora.com:80/goodparts?q#fragment";
const result = parse_url.exec(url);

const result2 = url.match(parse_url);

const names = ['url', 'scheme', 'slash', 'host', 'port', 'path', 'query', 'hash'];

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

for (let t = 0; t < names.length; t += 1) {
	if(names[t].length > stringLengthMax){
		stringLengthMax = names[t].length;
	}
}

for (let t = 0; t < (stringLengthMax + whitespace); t += 1) {
	blanks += buf;
}

console.log("blanks.length = " + blanks.length);

//stringLengthMaxをnames配列に格納された文字列の長さの最大長にしておく、
//これによりresult[t]を出す開始位置を揃えることができる。
//whitespace(>=0)でresult[t]の開始位置を調整する
for (let t = 0; t < names.length; t += 1) {
	console.log(names[t] + ':' + blanks.slice(names[t].length) + result[t]);
}

console.log("-----");

//gフラグがない場合は
//string.match(regexp)の呼び出し結果はregexp.exec(string)と同じになる
for (let t = 0; t < names.length; t += 1) {
	console.log(names[t] + ':' + blanks.slice(names[t].length) + result2[t]);
}

/*

blanks.length = 7
url:    http://www.ora.com:80/goodparts?q#fragment
scheme: http
slash:  //
host:   www.ora.com
port:   80
path:   goodparts
query:  q
hash:   fragment
-----
url:    http://www.ora.com:80/goodparts?q#fragment
scheme: http
slash:  //
host:   www.ora.com
port:   80
path:   goodparts
query:  q
hash:   fragment

*/



JavaScript:the good parts 「良いパーツ」によるベストプラクティス [ ダグラス・クロフォード ]  ExternalLink P76~77、99

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

SNSでもご購読できます。

コメントを残す

*