Ver Mensaje Individual
  #3 (permalink)  
Antiguo 11/05/2013, 13:42
tecop
 
Fecha de Ingreso: febrero-2013
Ubicación: salinas
Mensajes: 5
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Liado con expresión regular

Cita:
Iniciado por zerokilled Ver Mensaje
buenas...
realmente es sencillo. lo que sucede es que estás usando el boundary incorrecto. el boundary \b es un ancla que posiciona el puntero entre un caracter \w y \W, o viceversa, \W y \w. comúnmente se le conoce como word boundary porque intenta parear los límites de las palabras. lo que significa, que con el patrón /\b@\w*\b/, no podría encontrar coincidencia en el string " @usuario " porque el arroba y el caracter anterior (espacio) pertenecen a una misma clase, \W. para que pueda coincidir en ese string, antes del arroba debería haber un caracter de la clase \w, por ejemplo " a@usuario ". el resultado devuelto por el patrón con el string anterior sería @usuario.

¿la solución? usar la versión contraria de word-boundary (\b), non-word boundary \B. el ancla \B pocisiona el puntero entre dos caracteres de la misma clase. es decir, entre dos caracteres de la clase \W o la clase \w. por ejemplo, el patrón /\B\w+/ en el string "usuario" devuelve el string "suario" ya que el ancla se posiciona entre la primera "u" y "s". en fin, el patrón que necesitas es /\B@\w+\b/g.
Muchas gracias, está bien saber lo de las clases, utilicé /\B@\w*\b/g y perfecto.

Saludos.