Pregunta ¿Cómo comprobar si una cadena contiene una subcadena en JavaScript?


Por lo general, esperaría un String.contains() método, pero no parece ser uno.

¿Cuál es una forma razonable de verificar esto?


7436
2017-11-24 13:05


origen


Respuestas:


Aquí hay una lista de posibilidades actuales:

1. (ES6) includes-ir a responder

var string = "foo",
    substring = "oo";
string.includes(substring);

2. ES5 y más viejo indexOf

var string = "foo",
    substring = "oo";
string.indexOf(substring) !== -1;

String.prototype.indexOf devuelve la posición de la cadena en la otra cuerda. Si no se encuentra, volverá -1.

3. search-ir a responder

var string = "foo",
    expr = /oo/;
string.search(expr);

4. lodash incluye-ir a responder

var string = "foo",
    substring = "oo";
_.includes(string, substring);

5. RegExp-ir a responder

var string = "foo",
    expr = /oo/;  // no quotes here
expr.test(string);

6. Partido-ir a responder

var string = "foo",
    expr = /oo/;
string.match(expr);

Pruebas de rendimiento están mostrando que indexOf podría ser la mejor opción, si se trata de un punto donde la velocidad importa.


11460
2017-12-30 04:23



Puedes agregar fácilmente un contains método para Cadena con esta declaración:

String.prototype.contains = function(it) { return this.indexOf(it) != -1; };

Nota: vea los comentarios debajo para un argumento válido para no usar esto. Mi consejo: usa tu propio juicio.

Alternativamente:

if (typeof String.prototype.contains === 'undefined') { String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; }

822
2017-11-24 14:17



El problema con su código es que JavaScript distingue entre mayúsculas y minúsculas. Tu método de llamada

indexof()

en realidad debería ser

indexOf()

Intente arreglarlo y vea si eso ayuda:

if (test.indexOf("title") !=-1) {
    alert(elm);
    foundLinks++;
}

427
2018-01-07 10:23



Hay un string.includes en ES6:

"potato".includes("to");
> true

Tenga en cuenta que puede necesitar cargar es6-shim o similar para hacer que esto funcione en navegadores más antiguos.

require('es6-shim')

359
2017-11-24 13:06



var index = haystack.indexOf(needle);

340
2018-03-05 09:53



Puedes usar el JavaScript search() método.

La sintaxis es: string.search(regexp)

Devuelve la posición del partido, o -1 si no se encuentra ninguna coincidencia.

Ver ejemplos allí: jsref_search

No necesita una sintaxis de expresión regular complicada. Si no está familiarizado con ellos, un simple st.search("title") va a hacer Si desea que su prueba no distinga entre mayúsculas y minúsculas, entonces debe hacer st.search(/title/i).


237
2017-10-21 05:31



String.prototype.includes() fue introducido en ES6.

Determina si una cadena se puede encontrar dentro de otra cadena,   regresando verdadero o falso según sea apropiado.

Sintaxis

var contained = str.includes(searchString [, position]);  

Parámetros

searchString

Una cadena para ser buscada dentro de esta cadena.

position

La posición en esta cadena en la que comenzar a buscar searchString por defecto es 0.

Ejemplo

var str = "To be, or not to be, that is the question.";

console.log(str.includes("To be"));    // true
console.log(str.includes("question")); // true
console.log(str.includes("To be", 1)); // false  

Nota

Esto puede requerir calzas ES6 en navegadores más antiguos.


167
2018-05-29 07:46



Si estabas buscando una alternativa para escribir la fea -1 verificación, antepones una tilde en su lugar.

if (~haystack.indexOf('needle')) alert('found');

Joe Zimmerman - verás que usar ~ en -1 lo convierte en 0. El número 0 es   valor de Falsey, lo que significa que se evaluará como falso cuando se convierta en   un booleano Puede que no parezca una gran idea al principio, pero   recuerda funciones como indexOf devolverá -1 cuando la consulta no sea   encontró. Esto significa que en lugar de escribir algo similar a esto:

if (someStr.indexOf("a") >= 0) {
  // Found it
} else  {
  // Not Found
}

Ahora puede tener menos caracteres en su código para poder escribirlo   Me gusta esto:

if (~someStr.indexOf("a")) {
  // Found it
} else  {
  // Not Found
}

Más detalles aquí


120
2017-09-13 03:45



Esta pieza de código debería funcionar bien:

var str="This is testing for javascript search !!!";
if(str.search("for") != -1) {
   //logic
} 

82
2017-12-13 20:05



Una forma común de escribir un contains método en JavaScript es:

if (!String.prototype.contains) {
    String.prototype.contains = function (arg) {
        return !!~this.indexOf(arg);
    };
}

El operador de negación a nivel de bit (~) se usa para activar -1 dentro 0 (Falsey), y todos los demás valores serán distintos de cero (verdad).

Los operadores de negación booleana doble se utilizan para convertir el número en booleano.


77
2018-03-14 02:10



En ES5

var s = "foo";
alert(s.indexOf("oo") > -1);

En ES6 hay tres nuevos métodos: includes(), startsWith(), endsWith().

var msg = "Hello world!";

console.log(msg.startsWith("Hello"));       // true
console.log(msg.endsWith("!"));             // true
console.log(msg.includes("o"));             // true

console.log(msg.startsWith("o", 4));        // true
console.log(msg.endsWith("o", 8));          // true
console.log(msg.includes("o", 8));          // false


76
2017-11-24 13:13