2009-11-19 13 views
231

可能性の重複:
Javascript StartsWith文字列が何かで始まるかどうか確認しますか?

私は「idは何かを開始し、私はこれのためにそれを使用してみましたが、それはなかったのかどうかを確認するために、^ =のように行うことができることを知っていますトン作業は...基本的に、私は、URLを取得していると私は特定の方法で起動パス名要素のクラスを設定したい...だから

var pathname = window.location.pathname; //gives me /sub/1/train/yonks/459087 

私は/サブ/ 1で始まるすべてのパスのために、私は要素のクラスを設定できることを確認するには...

if(pathname ^= '/sub/1') { //this didn't work... 
     ... 
+0

'/^\/sub \/1。*/gi.test(pathname)'は述語としてブール値を返します。 –

+1

あなたが6年後に(自分自身として)[元の&複製された投稿のJavascript StartsWith](http://stackoverflow.com/questions/646628/how-to-check-if-a-string-startswith-別の文字列)は、Ecmascript 6のstartWith()関数を使用して、最高のパフォーマンスを持つように見える非常にきちんとした答えを提供します。 – theFreedomBanana

答えて

341

使用stringObject.substring

if (pathname.substring(0, 6) == "/sub/1") { 
    // ... 
} 
+15

-1:追加の冗長文字列を作成します。 – user1071136

+9

これはテストケースです:http://jsperf.com/starts-with/2。サブストリングメソッドは私のマシンで最も速く表示されます(V8)。 – Pijusn

+19

これはより一般的なようにすることができます: 'var x ="/sub/1 "; if(pathname.substring(0、x.length)=== x){ // ... } '。このようにして、 'x'の長さを知ることに依存しなくなりました。 –

79

あなたはstring.match()を使用することができ、あまりにもこのための正規表現:見つかった場合

if(pathname.match(/^\/sub\/1/)) { // you need to escape the slashes 

string.match()は、そうでない場合はヌル、一致するサブストリングの配列を返します。

+22

+1のために検索文字列の長さを指定する必要はありません – Mercurybullet

+0

動的にURL文字列をexprに挿入するには?例えば/のURLをエスケープする? – Tjorriemorrie

+1

@Tjorriemorrieこれは、var reUrlTester = new RegEx(your_url_string)のように、RegExクラスを使用して行うことができます。 if(reUrlTester.test(url)){//テスト関数を使用してURLが一致するかどうかを調べます。 – Cros

34

もう少し再利用可能な機能:

beginsWith = function(needle, haystack){ 
    return (haystack.substr(0, needle.length) == needle); 
} 
170
String.prototype.startsWith = function(needle) 
{ 
    return this.indexOf(needle) === 0; 
}; 
+9

-1を参照してください。このタイプの実装を使用しない正当な理由については、ここでコメントを参照してください。http:// stackoverflow.com/a/1978419/560287 –

+12

+1 indexOfは完璧です!私はあなたが所有していないオブジェクトにメソッドを追加しないことを提案します。 – collimarco

+1

これは、答えとしてマークされているものよりも完璧な答え(indexOfなもの)です。 –

22

はまず、文字列オブジェクトを拡張できます。プロトタイプのためのRicardo Peresのおかげで、変数 'string'の使い方は、読みやすくするという意味で「needle」よりも優れていると思います。

String.prototype.beginsWith = function (string) { 
    return(this.indexOf(string) === 0); 
}; 

次に、このように使用します。あぶない!コードを非常に読みやすくします。

var pathname = window.location.pathname; 
if (pathname.beginsWith('/sub/1')) { 
    // Do stuff here 
} 
+4

実際に何も追加していません。 – ratbum

+0

IMHO ** indexOf **は、最初に一致するものが見つからない場合は文字列全体を検索します。そのため、非常に長い文字列が検索されると効率が悪くなります。 –

関連する問題