2011-09-01 6 views
10

可能性の重複:
JavaScript: string contains文字列が別の文字列に存在するかどうかを調べる最も良い方法は何ですか?

私は、文字列が別に存在するかどうかをチェックするアルゴリズムを探しています。例えば

:事前に

'Hello, my name is jonh LOL.'.contains('Hello, my name is jonh'); //true 
'LOL. Hello, my name is jonh'.contains('Hello, my name is jonh'); //true 

感謝。

+0

文字列内に文字列が含まれているかどうかをチェックする最も一般的な方法のベンチマークがあります:http://jsben.ch/#/o6KmH – EscapeNetscape

答えて

11

使用indexOf:私は、プリコンパイルされたPerlベースの正規表現を使用することはかなり効率的であると仮定します

String.prototype.contains = function(substr) { 
    return this.indexOf(substr) > -1; 
} 
'Hello, my name is jonh LOL.'.contains('Hello, my name is jonh'); //true 
'LOL. Hello, my name is jonh'.contains('Hello, my name is jonh'); //true 
+1

さらにこの回答を見ると、 'function contains(haystack、needle){ return haystack.indexOf(needle)> -1; } 'あるいは、文字列プロトタイプを作成してください –

+0

@Jonathan' String.prototype'関数を追加しました。 –

+0

プロトタイプ機能の柔軟なレッスンをありがとう! – blackhawk

0

'Hello, my name is jonh LOL.'.indexOf('Hello, my name is jonh') > -1; //true 
'LOL. Hello, my name is jonh'.indexOf('Hello, my name is jonh') > -1; //true 

あなたはまたString.prototypeを拡張することができますがcontains機能を持っています。

RegEx rx = new Regex('Hello, my name is jonh', RegexOptions.Compiled); 
rx.IsMatch('Hello, my name is jonh LOL.'); // true 
+0

JavaScriptを使用していますが、感謝しています:P –

+0

さらに良い: 'var regex = /こんにちは、私の名前はjonh /です。 regex.test( "こんにちは、私の名前は大丈夫です。"); // true' – clarkb86

0

もう1つのオプションは、match():http://www.w3schools.com/jsref/jsref_match.aspを使用して正規表現に一致する可能性があります。

> var foo = "foo"; 
> console.log(foo.match(/bar/)); 
null 
> console.log(foo.match(/foo/)); 
[ 'foo', index: 0, input: 'foo' ] 
1

デジタルは、indexOfメソッドをチェックする方法です。宣言的な名前がcontainsの場合は、Stringプロトタイプに追加できます。元のコードサンプルはあいまいに行くことについて書かれ

1

どのように動作することをした後

String.prototype.contains = function(toCheck) { 
    return this.indexOf(toCheck) >= 0; 
} 

!!~'Hello, my name is jonh LOL.'.indexOf('Hello, my name is jonh'); //true 
if(~'LOL. Hello, my name is jonh'.indexOf('Hello, my name is jonh')) 
    alert(true); 

それを変換するよりも、ブール値に変換するビット単位のNOTを使用してブールNOTとしますバック。

+0

これは機能しますが、 'val> -1'はより少ない操作です。 – zzzzBov

+0

@zzzzBov、技術的には!!不必要です。だからチルダだけがうまくいくでしょう。 – Joe

+0

...どのくらい厳密にブール値が必要かによって異なります。私は同意します、 '〜'は正しい偽の状態を出力します。 – zzzzBov

関連する問題