3

正規表現を使用して、指定された URL のルート ドメインを返す関数があります。

http://jsfiddle.net/hSpsT/

function cleanUp(url) {
  url = url.replace(new RegExp(/^\s+/),""); // START
  url = url.replace(new RegExp(/\s+$/),""); // END

  // IF FOUND, CONVERT BACK SLASHES TO FORWARD SLASHES
  url = url.replace(new RegExp(/\\/g),"/");

  // IF THERE, REMOVES 'http://', 'https://' or 'ftp://' FROM THE START
  url = url.replace(new RegExp(/^http\:\/\/|^https\:\/\/|^ftp\:\/\//i),"");

  // IF THERE, REMOVES 'www.' FROM THE START OF THE STRING
  url = url.replace(new RegExp(/^www\./i),"");
  //remove slash from end
  url = url.replace(new RegExp(/\/$/i),"");    
  return url;
}

しかし、複数の正規表現を使用しているため、パフォーマンスが心配です。1行の正規表現で同じことを行うより良い方法はありますか?

ノート:

私の場合、 document.location.host は機能していないようです。

4

2 に答える 2

5

文字列からホスト名名を抽出する

試す:

function cleanUp(url) {
    var url = $.trim(url);
    if(url.search(/^https?\:\/\//) != -1)
        url = url.match(/^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i, "");
    else
        url = url.match(/^([^\/?#]+)(?:[\/?#]|$)/i, "");
    return url[1];
}

alert(cleanUp('  http://www.google.com/about.html'));
alert(cleanUp('  www.google.com/about.html'));
于 2013-02-11T07:57:44.190 に答える
1

これを試して:

http://jsfiddle.net/picklespy/gb34u/1/

最新のすべてのブラウザーで動作し、IE 5.5 以降でも動作します。

var url = document.createElement('a');
url.href = 'http://maps.test.google.com';
var host = url.hostname;

host = host.split('.');

var domain = host.pop();
domain = host.pop() + '.' + domain;

alert('Root is: ' + domain)
于 2013-02-11T07:54:03.613 に答える