Buscar en una cadena de texto con 'in'
@ JavaScript @ Permalink
Después de JavaScript (EcmaScript), Python es mi segundo lenguaje de programación favorito. Tiene una curva de aprendizaje muy bajo, haciéndolo bastante intuitivo comparado con otros lenguajes y su lista de keywords básicos es corta. Cualquier individuo puede adaptarse rápidamente, incluso aquellos que nunca han escrito una línea de código (pero que entienden inglés).
Uno de los keywords básicos de Python es in
, usado para buscar porciones de texto dentro de una cadena de texto, lista, diccionario o tupla.
if 'banana' in ('apple','pineapple','banana','pear'):
print 'Banana is a fruit'
else:
print 'Nop, is an animal'
if 'banana' in 'Tonight we will eat banana dessert':
print 'Cool, is banana tonight!'
else:
print "I'm not hungry"
JavaScript también tiene su in
pero está supeditado a ser un operador, habitualmente amarrado al bucle for
por su forma limitada de reaccionar.
var fruits = ['apple','pineapple','banana','pear'];
for (var f in fruits)
{
var fruit = fruits[f];
console.log(fruit);
};
¿Qué tal si emulamos in
en JavaScript para evaluar una porción de texto? Muchas veces he tenido que buscar porciones de texto en una gran cadena, así que dándole vueltas al asunto acá les muestro una función que preparé a la que podemos pasar un array, una cadena de texto o un objeto JavaScript.
String.prototype.in = function(arr)
{
var str = String(this);
var arr = arr || [];
function accents (s)
{
s = String(s).toLowerCase().trim();
s = s.replace(/á|à|â|ã|ä|å|ā|æ/gi,'a');
s = s.replace(/é|è|ê|ë|ē|ę/gi,'e');
s = s.replace(/í|î|ï|ī/gi,'i');
s = s.replace(/õ|ó|ô|ö|ő|ō|ø|œ/gi,'o');
s = s.replace(/ú|ü|û|ů|ű|ŭ|ū/gi,'u');
s = s.replace(/ç|č|ĉ|ć/gi,'c');
s = s.replace(/š|ŝ|ś|ş/gi,'s');
s = s.replace(/ÿ|ý|ŷ/gi,'y');
s = s.replace(/ž|ź|ż/gi,'z');
s = s.replace(/ţ|ț/gi,'t');
s = s.replace(/ñ|ň/gi,'n');
s = s.replace(/ř/gi,'r');
s = s.replace(/ĵ/gi,'j');
s = s.replace(/ğ/gi,'g');
s = s.replace(/ŵ/gi,'w');
s = s.replace(/[^0-9a-z]/gi,'');
return s;
};
str = accents(str);
if ( typeof arr === 'object' )
{
arr = accents(JSON.stringify(arr));
};
if ( typeof arr === 'string' )
{
arr = accents(arr);
};
return arr.indexOf(str) > -1;
};
Lo aplicamos así:
var fruits = ['apple','pineapple','banana','pear'];
// var fruits = [{ fruit: 'apple' }, { fruit: 'pineapple' }, { fruit: 'banana' }, { fruit: 'pear' }];
// var fruits = 'apple, pineapple, banana, pear';
var banana = 'banana';
if ( banana.in(fruits) )
{
console.log('Banana is a fruit');
} else {
console.log('Nop, is an animal');
};
Si la palabra 'banana' se encuentra dentro de un array, una cadena de texto o un objeto JavaScript, devolverá true
, de lo contrario false
.
Esto nos simplificará un poco el trabajo, ¿no lo creen?