validar operadores objetos manejo logicos funciones elementos comparar caracter cadenas cadena buscar array javascript string comparison

operadores - Comparación de cadenas comodín en Javascript



operadores logicos javascript (5)

digamos que tengo una serie con muchas cadenas llamadas "birdBlue", "birdRed" y algunos otros animales como "pig1", "pig2).

Ahora ejecuto un bucle for que atraviesa la matriz y debería devolver todas las aves. ¿Qué comparación tendría sentido aquí?

Animals == "bird*" fue mi primera idea pero no funciona. ¿Hay una manera de usar el operador * (o hay algo similar a usar?


Creo que quiso decir algo como "*" (estrella) como comodín, por ejemplo:

  • "a * b" => todo lo que comienza con "a" y termina con "b"
  • "a *" => todo lo que comienza con "a"
  • "* b" => todo lo que termina con "b"
  • "* a *" => todo lo que tiene una "a" en ella
  • "* a * b *" => todo lo que tiene una "a", seguido de cualquier cosa, seguido de una "b", seguido de cualquier cosa

o en tu ejemplo: "bird *" => todo lo que comienza con bird

Tuve un problema similar y escribí una función con RegExp:

//Short code function matchRuleShort(str, rule) { return new RegExp("^" + rule.split("*").join(".*") + "$").test(str); } //Explanation code function matchRuleExpl(str, rule) { // "." => Find a single character, except newline or line terminator // ".*" => Matches any string that contains zero or more characters rule = rule.split("*").join(".*"); // "^" => Matches any string with the following at the beginning of it // "$" => Matches any string with that in front at the end of it rule = "^" + rule + "$" //Create a regular expression object for matching string var regex = new RegExp(rule); //Returns true if it finds a match, otherwise it returns false return regex.test(str); } //Examples alert( "1. " + matchRuleShort("bird123", "bird*") + "/n" + "2. " + matchRuleShort("123bird", "*bird") + "/n" + "3. " + matchRuleShort("123bird123", "*bird*") + "/n" + "4. " + matchRuleShort("bird123bird", "bird*bird") + "/n" + "5. " + matchRuleShort("123bird123bird123", "*bird*bird*") + "/n" );

Si quieres leer más sobre las funciones utilizadas:


Debe usar RegExp (son impresionantes) una solución fácil es:

if( /^bird/.test(animals[i]) ){ // a bird :D }


Podrías usar el método de substring de Javascript. Por ejemplo:

var searchArray = function(arr, str){ // If there are no items in the array, return an empty array if(typeof arr === ''undefined'' || arr.length === 0) return []; // If the string is empty return all items in the array if(typeof str === ''undefined'' || str.length === 0) return arr; // Create a new array to hold the results. var res = []; // Check where the start (*) is in the string var starIndex = str.indexOf(''*''); // If the star is the first character... if(starIndex === 0) { // Get the string without the star. str = str.substr(1); for(var i = 0; i < arr.length; i++) { // Check if each item contains an indexOf function, if it doesn''t it''s not a (standard) string. // It doesn''t necessarily mean it IS a string either. if(!arr[i].indexOf) continue; // Check if the string is at the end of each item. if(arr[i].indexOf(str) === arr[i].length - str.length) { // If it is, add the item to the results. res.push(arr[i]); } } } // Otherwise, if the star is the last character else if(starIndex === str.length - 1) { // Get the string without the star. str = str.substr(0, str.length - 1); for(var i = 0; i < arr.length; i++){ // Check indexOf function if(!arr[i].indexOf) continue; // Check if the string is at the beginning of each item if(arr[i].indexOf(str) === 0) { // If it is, add the item to the results. res.push(arr[i]); } } } // In any other case... else { for(var i = 0; i < arr.length; i++){ // Check indexOf function if(!arr[i].indexOf) continue; // Check if the string is anywhere in each item if(arr[i].indexOf(str) !== -1) { // If it is, add the item to the results res.push(arr[i]); } } } // Return the results as a new array. return res; } var birds = [''bird1'',''somebird'',''bird5'',''bird-big'',''abird-song'']; var res = searchArray(birds, ''bird*''); // Results: bird1, bird5, bird-big var res = searchArray(birds, ''*bird''); // Results: somebird var res = searchArray(birds, ''bird''); // Results: bird1, somebird, bird5, bird-big, abird-song

Qué salidas:

var list = ["bird1", "bird2", "pig1"] for (var i = 0; i < list.length; i++) { if (list[i].substring(0,4) == "bird") { console.log(list[i]); } }

Básicamente, estás revisando cada elemento de la matriz para ver si las primeras cuatro letras son ''pájaro''. Esto asume que ''pájaro'' siempre estará al frente de la cuerda.

Así que digamos que obtienes un nombre de ruta desde una URL:

Digamos que estás en bird1? = Letsfly - podrías usar este código para verificar la URL:

bird1 bird2

Lo anterior coincidiría con el primero de los URL, pero no el tercero (no el cerdo). Puede cambiar fácilmente url.substring(0,4) con una expresión regular, o incluso otro método javascript como .contains ()

Usar el método .contains() puede ser un poco más seguro. No necesitarás saber en qué parte de la URL "pájaro" se encuentra. Por ejemplo:

var listOfUrls = [ "bird1?=letsfly", "bird", "pigs?=dontfly", ] for (var i = 0; i < list.length; i++) { if (listOfUrls[i].substring(0,4) === ''bird'') { // do something } }



var url = ''www.example.com/bird?=fly'' if (url.contains(''bird'')) { // this is true // do something }

Hay una larga lista de advertencias a un método como este, y una larga lista de "qué pasaría si" no se tienen en cuenta, algunas de las cuales se mencionan en otras respuestas. Pero para un uso simple de la sintaxis en estrella este puede ser un buen punto de partida.

Fiddle