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

相关问题