string buscar palabra - ¿Cómo comprobar si una cadena contiene una subcadena en JavaScript?




15 Answers

Puede agregar fácilmente un método de contenido a Cadena con esta declaración:

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

Nota: vea los comentarios a continuación 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; }; }
caracter jquery substring

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

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




Hay una string.includes en ES6 :

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

Tenga en cuenta que es posible que deba cargar es6-shim o similar para que esto funcione en navegadores más antiguos.

require('es6-shim')



Podrías usar el método search() JavaScript.

La sintaxis es: string.search(regexp)

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

Ver ejemplos allí: jsref_search

No necesitas una sintaxis de expresión regular complicada. Si no está familiarizado con ellos, una st.search("title") simple st.search("title") será suficiente. Si desea que su prueba no st.search(/title/i) mayúsculas y minúsculas, debe hacer una st.search(/title/i) .




Si estaba buscando una alternativa para escribir el cheque feo -1, en lugar de eso, debe anteponer una tilde.

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

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

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

Ahora puedes tener menos caracteres en tu código para que puedas escribirlo así:

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

Más detalles aquí




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

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

El operador de negación a nivel de bits ( ~ ) se usa para convertir -1 en 0 (falsey), y todos los demás valores serán distintos de cero (truey).

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




En lugar de usar fragmentos de código que se encuentran aquí y allá en la web, también puede usar una biblioteca bien probada y documentada. Dos opciones recomendaría:

1ª opción: Usar Lodash : tiene un método de Lodash :

_.includes('foobar', 'ob');
// → true

Lodash es la dependencia de biblioteca javascript más popular para npm y tiene muchos métodos prácticos de utilidad de javascript. Así que para muchos proyectos querrías esto de todos modos ;-)

2ª opción: O usa Underscore.string : tiene un método de include :

_.str.include('foobar', 'ob');
// → true

Aquí está la descripción de Underscore.string, solo agrega 9kb pero le brinda todas las ventajas que una biblioteca bien probada y documentada tiene sobre los fragmentos de código de copiar y pegar:

Underscore.string es una biblioteca de JavaScript para una cómoda manipulación con cadenas, extensión para Underscore.js inspirada en Prototype.js, Right.js, Underscore y el hermoso lenguaje Ruby.

Underscore.string le proporciona varias funciones útiles: capitalizar, limpiar, incluye, contar, escapeHTML, unescapeHTML, insertar, empalmar, comienza con, termina con, titular, recortar, truncar, etc.

Tenga en cuenta que Underscore.string está influenciado por Underscore.js pero se puede usar sin él.

Por último, no menos importante: con la versión de JavaScript, ES6 incluye un método de inclusión integrado:

'foobar'.includes('ob');
// → true

La mayoría de los navegadores modernos ya lo admiten, tienen un ojo en la tabla de compatibilidad ES6 .







Usted buscaba .indexOf String.prototype.indexOf .

indexOf devolverá un índice a la subcadena coincidente. El índice se correlacionará con donde comienza la subcadena. Si no hay coincidencia, se devuelve un -1. Aquí hay una simple demostración de ese concepto:

var str = "Hello World"; // For example, lets search this string,
var term = "World"; // for the term "World",
var index = str.indexOf(term); // and get its index.
if (index != -1) { // If the index is not -1 then the term was matched in the string,
  alert(index); // and we can do some work based on that logic. (6 is alerted)
}




Esto acaba de funcionar para mí. Selecciona cadenas que no contienen el término "Eliminado:"

if (eventString.indexOf("Deleted:") == -1)



Hay una forma elegante y mejor de hacer esto y está utilizando el operador (BitWise NOT).

if(~"John".indexOf("J")) {
  alert("Found")
}
else {
  alert("Not Found");
}

Bitwise Not convierte "x" en - (x + 1), por lo tanto, si x resulta -1 del método indexOf, se convertirá en - (-1 + 1) = -0, que es un valor falso.




Ejemplo

var a  = "Test String";

if(a.search("ring")!=-1){
     //exist 
} else {
     //not found 
}






Para recoger algún tipo de soluciones válidas:

var stringVariable = "some text";
var findString = "text";

//using `indexOf()`
var containResult1 = stringVariable.indexOf(findString) != -1;
document.write(containResult1+', ');

//using `lastIndexOf()`
var containResult2 = stringVariable.lastIndexOf(findString) != -1;
document.write(containResult2+', ');

//using `search()`
var containResult3 = stringVariable.search(findString) != -1;
document.write(containResult3+', ');
     
//using `split()`
var containResult4 = stringVariable.split(findString)[0] != stringVariable;
document.write(containResult4+'');




JavaScript

 var str = "My big string contain apples and oranges";
 var n = str.indexOf("apples"); 
 alert(n); //will alert 22, -1 if not found

jQuery

  <p>My big string contain apples and oranges</p>
  alert($("p:contains(apples)")[0] != undefined); //will alert true if found



Use la incorporada y la más simple, es decir, match() en la cadena. Para lograr lo que espera hacer esto:

var stringData ="anyString Data";

var subStringToSearch = "any";

// This will give back the substring if matches and if not returns null
var doesContains = stringData.match(subStringToSearch);

if(doesContains !=null) {
    alert("Contains Substring");
}



Related