2011-09-01 22 views
10

Duplicar posible:
JavaScript: string contains¿Cuál es la mejor manera de verificar si una cadena existe en otra?

Busco un algoritmo para comprobar si existe una cadena en otra.

Por ejemplo:

'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 

Gracias de antemano.

+0

Aquí un punto de referencia para las formas más comunes de comprobar si una cadena está en una cadena: http://jsben.ch/#/o6KmH – EscapeNetscape

Respuesta

11

Uso 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 

También puede extender String.prototype tenga una función contains:

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

Además de esta respuesta, puede crear 'function contains (haystack, needle) { devuelve haystack.indexOf (needle)> -1; } 'O incluso crear uno en el prototipo de String –

+0

@Jonathan Agregué una función' String.prototype'. –

+0

gracias por la lección de flexibilidad funcional del prototipo! – blackhawk

0

yo supongo que el uso de pre-compilados expresión regular basado en Perl sería bastante eficiente.

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

Estoy usando JavaScript, pero gracias: P –

+0

Aún mejor: 'var regex =/Hola, mi nombre es jonh /; regex.test ("Hola, mi nombre es jonh LOL."); // verdadero' – clarkb86

0

otra opción podría ser para que coincida con una expresión regular mediante el uso de fósforo(): 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

Como se señaló digital a cabo el método indexOf es la manera de comprobar. Si desea un nombre más declarativo como contains, puede agregarlo al prototipo String.

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

Después de que la muestra de código original funcionará como está escrito

1

¿Qué hay de ir a la oscuridad:

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

El uso de NOT en modo bit y NOT booleanas para convertirlo en un valor lógico de convertirlo espalda.

+0

aunque esto funciona, 'val> -1' es menos operaciones – zzzzBov

+0

@zzzzBov, ¡¡técnicamente !! Es innecesario Así que solo la tilde funcionaría. – Joe

+0

... dependiendo de cuán estrictamente necesite un valor booleano. Estoy de acuerdo, '~' arrojará el estado Falsey correcto. – zzzzBov

Cuestiones relacionadas