Foros del Web » Programando para Internet » Javascript »

RegEx cadena con parentesis

Estas en el tema de RegEx cadena con parentesis en el foro de Javascript en Foros del Web. Saludos!!! Estoy desarrollando una pagina asp.net en la cual tengo una funcion java que compara unos textos para modificar el innerhtml, para comparar las cadenas ...
  #1 (permalink)  
Antiguo 04/10/2010, 13:30
 
Fecha de Ingreso: octubre-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Pregunta RegEx cadena con parentesis

Saludos!!!

Estoy desarrollando una pagina asp.net en la cual tengo una funcion java que compara unos textos para modificar el innerhtml, para comparar las cadenas uso el RegExp y mi problema es el siguiente:

Tengo el inner de mi pagina el cual lo recibo en una variable string
tengo en el RegExp el texto que voy a buscar
despues comparo si existe el texto que busco con el texto en mi variable string, funciona correctamente siempre y cuando mi texto a buscar no contenga caracteres especiales como '(', ')' y '$' en cuyo caso me dice que la cadena no existe aunque si exista, he probado sustituirlos por su valor ASCII y no resulta asi como otros metodos y tampoco me da resultado, mi codigo es asi:

Busqueda la recibo ocmo parametro de un input
cadena es la variable donde almaceno todo el innerhtml de mi pagina
largo_cadena es la longitud de cadena

var rgEx = new RegExp(Busqueda, 'gi');
if (cadena.substr(0, parseInt(largo_cadena)).match(rgEx)) {
....aqui el codigo que tengo que ejecutar si existe la busqueda
}

digamos si Busqueda contiene 'Hola mundo' si me la encuentra y entra en el if, pero si la cadena es 'Hola (mundo)' y asi es como esta en el inner aunque sea esto correcto no me la busca, y si mi busqueda es '(mundo)' si me la encuentra y entra en el if pero la accion la hace sobre 'mundo' y no sobre '(mundo)'. lo que aqui pasa es que cambio el formato de mi palabra que estoy comparando.

Agradezco su atencion brindada y tengo total confianza de que ustedes podran ayudarme con mi problema, estamos en contacto y que tengan un excelente día.
  #2 (permalink)  
Antiguo 04/10/2010, 13:38
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 6 meses
Puntos: 310
Respuesta: RegEx cadena con parentesis

Prueba con:
Código Javascript:
Ver original
  1. var patt = /Hola \(?mundo\)?/;
Los carácteres especiales ("()?*+.[]"...) se escapan con una contrabarra \.
Por cierto, si lo que necesitas es saber si la cadena es o no es la que tú quieres no uses match(), usa test(). Si necesitas recuperar esa parte del string no.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #3 (permalink)  
Antiguo 04/10/2010, 13:55
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: RegEx cadena con parentesis

en tu caso necesitaras otra expresión regular para buscar los caracteres especiales que menciono _cronos2. con esa expresión, la pasas en el método replace y vas a reemplazar por doble barra invertida (backslash) seguido del caracter especial. finalmente ese resultado se lo pasas al constructor RegExp.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #4 (permalink)  
Antiguo 05/10/2010, 10:24
 
Fecha de Ingreso: octubre-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: RegEx cadena con parentesis

Ya lo he intentado con las barras invertidas, sin embargo al momento de hacer la comparacion no me lo valida, he intentado hacer el replace pero mi problema vien al hacerlo sobre el codigo del inner en el cual como tengo otras funciones se ven afectadas, les pongo el codigo completo con lo que debe realizar en caso de encontrar la palabra:


var rgEx = new RegExp(cadABuskar, 'gi');
if (cadena.substr(0, parseInt(largo_cadena)).match(rgEx)) {

var marca = cadena.substr(0, parseInt(largo_cadena)).replace(rgEx, function(coincidencia) { return '<span style=\"background-color:#6495ED;\">' + coincidencia + '</span>'; });

document.getElementById('AreaCaptura').innerHTML = marca;

} else {
document.getElementById('AreaCaptura').innerHTML = cadena;
}

En si mi funcion lo que hace es cambiarle el color del fondo a la palabra que buscan, esto lo hago modificado el inner agregandole a la palabra un span, esto es para realizar busquedas de texto, sin embargo con el select de java no funciona la busqueda por otros componentes que tengo en la pagina, los cuales no son compatibles con el select del textrange de java, por esto lo hago modificando el inner para simular la seleccion del texto.
  #5 (permalink)  
Antiguo 05/10/2010, 10:56
 
Fecha de Ingreso: octubre-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: RegEx cadena con parentesis

por cierto el test no me lo reconoce mi variable ni cadena ni regex
  #6 (permalink)  
Antiguo 05/10/2010, 12:05
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: RegEx cadena con parentesis

Cita:
Ya lo he intentado con las barras invertidas, sin embargo al momento de hacer la comparacion no me lo valida, he intentado hacer el replace pero mi problema vien al hacerlo sobre el codigo del inner en el cual como tengo otras funciones se ven afectadas
¿cómo lo realizaste? porque en el código no lo veo aplicado. respecto a test y match, test es una función de las expresiones mientras match es una función de los string. de todos modos, no veo mal que uses match en el mismo modo que test. en tu caso, match devolvería un array cuando encuentra coincidencias y null cuando no encuentra. estos dos valores se transcriben a true o false, por lo que te funcionaría igual si usaras test.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 06/10/2010, 09:54
 
Fecha de Ingreso: octubre-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: RegEx cadena con parentesis

Asi es como habia usado el test:

var rgEx = new RegExp(cadABuskar, 'gi');
var rgEx2 = new RegExp(cadena, 'gi');


if rgEx.test(rgEx2)) {
.....
} else {
.....
}

y tambien de esta forma

if rgEx2.test(rgEx)) {
.....
} else {
.....
}

y en base a busqueda

if rgEx2.test(cadABuskar)) {
.....
} else {
.....
}
  #8 (permalink)  
Antiguo 06/10/2010, 15:00
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: RegEx cadena con parentesis

has hecho un meollo considerablemente brutal olvidate de lo que acabas de hacer. concentrate en lo que te indico cronos y lo que mencione en mi primer mensaje. antes de realizar la expresion regular de busqueda, tienes que limpiar esa cadena de busqueda escapando aquellos caracteres que son especiales en la sintaxis de las expresiones regulares.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #9 (permalink)  
Antiguo 07/10/2010, 11:08
 
Fecha de Ingreso: octubre-2010
Mensajes: 5
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: RegEx cadena con parentesis

ya quedo resuelto, muchas gracias por su apoyo, lo que hice fue jugar con los regEx y los String, hay condiciones en las que el regEx no funciona pero el tipo String si funciona entonces solo las ajuste a lo que era necesario, quedando asi:


if (cadena.substr(0, parseInt(largo_cadena)).match(rgEx)) {

codigo para cuando no hay caracteres especiales

} else if (cadABuskar.toString().indexOf('(') != -1 || cadABuskar.toString().indexOf(')') != -1 || cadABuskar.toString().indexOf('$') != -1) {

caracter_especial = true;

nueva = rgEx.toString().substr(1, cadABuskar.toString().length);

var marca = cadena.substr(0, parseInt(largo_cadena)).replace(nueva, function(coincidencia) { return '<span style=\"background-color:#6495ED;\">' + coincidencia + '</span>'; });

document.getElementById('DIV_Pagina').innerHTML = marca;
}
else {
...codigo para cuando no existe la busqueda
}


me di cuenta que la expresion regular no me estaba realizando la comparacion pero el objeto String si la realizaba, asi que lo maneje con String, ustedes que opinan?
  #10 (permalink)  
Antiguo 07/10/2010, 16:51
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 8 meses
Puntos: 1485
Respuesta: RegEx cadena con parentesis

¿tan complicado era?
Código:
// search contiene el string a buscar;
// se limpian los caracteres especiales;
var search = search.replace(/[\[\]\{\}\(\)\+\*\?\.\-\|\\\/\^\$]/g, "\\$&");

// ahora regex es una expresion que puede buscar literalmente cualquier string sin conflicto de signos;
var regex = new RegExp(search, "gi");
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: regex, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:36.