URLの先頭の文字列を削除します


105

www.URL文字列の先頭から「」部分を削除したい

たとえば、次のテストケースでは、

eg www.test.comtest.com
eg www.testwww.comtestwww.com
eg testwww.comtestwww.com(存在しない場合)

Regexpを使用する必要がありますか、それともスマートな機能はありますか?


これは非常に古い質問ですが、それはあなたがこれではなく、正規表現のためのURLパーサーを使用する必要があり2019年に指摘する価値がある
mikemaccana

1
の所有者はwww.com、これらすべての応答にひどく悲しむことになります。
BrainCore

回答:


234

必要なものに応じて、いくつかの選択肢があり、次のことができます。

// this will replace the first occurrence of "www." and return "testwww.com"
"www.testwww.com".replace("www.", "");

// this will slice the first four characters and return "testwww.com"
"www.testwww.com".slice(4);

// this will replace the www. only if it is at the beginning
"www.testwww.com".replace(/^(www\.)/,"");

24
おそらく最後のものが最適なソリューションです。
クリストフ

11
それは最適なソリューションではありません。部分文字列を削除するための正規表現を作成するのはやりすぎです。
berezovskyi 2016年

4
@berezovskiyそれはあなたが何をしているのかに依存します、例えばあなたが正しいことが重要なゲームを作っているなら、ほとんどの場合IMOは明示的である方がずっと良く、最小限のパフォーマンスのためのバグを導入しませんヒット。それでも、答えは3つの異なる例から選択できます。
nicosantangelo 2016年

7
私は最後のオプションを強く好みます。使用slice()わずかに速いことは事実ですが、これは99.9%のシナリオでは無関係で時期尚早の最適化です。書き込みはreplace(/^www\./,"") 、自己文書化コードは明らかです。
トム・ロード、

5
最初と2番目のソリューションは、3番目の例のケースに失敗します。tutut
Yarek T

13

はい、RegExpがありますが、それを使用したり、「スマート」関数を使用したりする必要はありません。

var url = "www.testwww.com";
var PREFIX = "www.";
if (url.indexOf(PREFIX) == 0) {
  // PREFIX is exactly at the beginning
  url = url.slice(PREFIX.length);
}

11

文字列の形式が常に同じである場合は、単純な形式でsubstr()十分です。

var newString = originalStrint.substr(4)

4
testwww.comtwww.com=失敗
クリストフ

1
@Christoph Ya、私の回答の後に彼が質問を編集した方法で、文字列が常に同じ形式であるかどうかを述べました
talnicolas

14
@Christophの場合、 " testwww.comwww.com= FAIL"
talnicolas

6

次のように手動で

var str = "www.test.com",
    rmv = "www.";

str = str.slice( str.indexOf( rmv ) + rmv.length );

または単に使用する.replace()

str = str.replace( rmv, '' );

1
正規表現をめちゃくちゃにするリスクなしで文字列を変数から取得できるため、私は手動のアプローチが好きです。
nha 2015年

5

removePrefix関数を使用して、Stringプロトタイプをオーバーロードできます。

String.prototype.removePrefix = function (prefix) {
    const hasPrefix = this.indexOf(prefix) === 0;
    return hasPrefix ? this.substr(prefix.length) : this.toString();
};

使用法:

const domain = "www.test.com".removePrefix("www."); // test.com

文字列のプロトタイプを変更することは悪い習慣だと思います
dman

はい、プロトタイプのオーバーロードと同様に、別のメソッド(ここremovePrefixではStringクラス)と名前が衝突する危険があります.removePrefix。逆に、を呼び出すだけで非常に便利です。それはあなた次第です。
Flavien Volken

2

以下をお試しください

var original = 'www.test.com';
var stripped = original.substring(4);

0

あなたはURLをカットしてresponse.sendredirect(new url)を使うことができます、これはあなたを新しいURLで同じページに連れて来るでしょう


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.