2011-09-01 138 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

'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.prototypecontains功能:

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){返回haystack.indexOf(針)> -1; }'或者甚至在String原型上創建一個 –

+0

@Jonathan我添加了一個'String.prototype'函數。 –

+0

感謝您的原型功能靈活性課! – blackhawk

0

我會假設使用預編譯的基於Perl的正則表達式將是非常有效的。

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(「你好,我的名字是jonh LOL。」); // true' – clarkb86

1

As Digital指出indexOf方法是檢查的方法。如果您想要一個更具說明性的名稱,例如contains,則可以將其添加到String原型。

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

之後,你原來的代碼示例將作爲書面

1

如何去默默無聞:

!!~'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); 

使用逐不要和布爾組合這些將其轉換爲一個布爾比將其轉換背部。

+0

雖然這個工作,'val> -1'的操作更少 – zzzzBov

+0

@zzzzBov,技術上是!!是不需要的。所以只是波浪線會起作用。 – Joe

+0

...取決於你需要多麼嚴格的布爾值。我同意,'〜'會輸出正確的錯誤狀態。 – zzzzBov

相關問題