Coincidencia de una barra inclinada hacia adelante con una expresión regular


90

No tengo mucha experiencia con JavaScript, pero estoy tratando de crear un sistema de etiquetas que, en lugar de usar @o #, usaría /.

var start = /#/ig; // @ Match

var word = /#(\w+)/ig; //@abc Match

¿Cómo podría usar un en /lugar de #. Intenté hacer var slash = '/'y agregar + slash +, pero falló.


1
Cambie el título. ¿Y qué estás intentando hacer realmente? Todavía no tengo idea después de leer tu pregunta.
OptimusCrime

No estoy seguro de entender.
John Strickler

Respuestas:


123

Puedes escapar así.

/\//ig; //  Matches /

o simplemente use indexOf

if(str.indexOf("/") > -1)

Gracias Ben, lo intenté también pero agregué otro \ al final.
iBrazilian2



6

En las expresiones regulares, "/" es un carácter especial que necesita ser escapado (AKA marcado colocando un \ antes de él, negando así cualquier función especializada que pueda servir).

Esto es lo que necesita:

var word = /\/(\w+)/ig; //   /abc Match

Lea sobre los caracteres especiales de RegEx aquí: http://www.regular-expressions.info/characters.html


17
"/" no es un carácter especial en expresiones regulares. Sin embargo, es un carácter especial en JavaScript que delimita dónde comienza y termina la expresión regular.
sokkyoku

5

También puede evitar el manejo especial de JS de la barra inclinada encerrándola en un grupo de caracteres, así:

const start = /[/]/g;
"/dev/null".match(start)     // => ["/", "/"]

const word = /[/](\w+)/ig;
"/dev/null".match(word)      // => ["/dev", "/null"]

2
+1, el uso de un conjunto de caracteres para evitar el escape hace que la expresión regular sea un carácter más larga, pero vale la pena por su legibilidad: /[/]/diferencia visualmente el delimitador final con más claridad que /\//.
Dem Pilafian

2
/[/]/es más fácil de leer y funciona, pero desafortunadamente, algunos validadores de RegEx informarán "Un delimitador sin escape debe escaparse con una barra invertida" incluso dentro de un grupo de caracteres . Entonces, volví a la /\//forma fea .
Dem Pilafian


1

Para mí, estaba tratando de hacer coincidir /en una fecha en C #. Lo hice simplemente usando (\/):

string pattern = "([0-9])([0-9])?(\/)([0-9])([0-9])?(\/)(\d{4})";
string text = "Start Date: 4/1/2018";

Match m = Regex.Match(text, pattern);

if (m.Success) 
{ 
    Console.WriteLine(match.Groups[0].Value);  // 4/1/2018
}
else
{
    Console.WriteLine("Not Found!");
}

JavaScript también debería poder usar de manera similar (\/).


Votante negativo, ¿te importaría explicar? Esto funciona y lo he demostrado probándolo.
vapcguy

1
Creo que fue un accidente, lo siento. Intenté deshacerlo, pero dice que mi voto está bloqueado a menos que se edite la respuesta. Lo único que veo es que tiene un registro de captura de grupos que parece que no está utilizando. ¿Alguna razón por la que todo está entre paréntesis?
Ryan Quinn

1
@RyanQuinn Gracias por la explicación. Usé paréntesis para agrupar cosas para representar un dígito en particular que esperaba. También parecía requerirlos en un sitio que estaba usando para probarlo: regexr.com Edité mi publicación (solo agregué un espacio al final), por lo que debería poder eliminar el voto negativo si lo desea.
vapcguy

0

Encontré dos problemas relacionados con lo anterior, al extraer texto delimitado por \ y /, y encontré una solución que se ajusta a ambos, además de usar new RegExp, que requiere \\\\al principio. Estos hallazgos están en Chrome e IE11.

La expresión regular

/\\(.*)\//g

No funciona. Pienso que el// se interpreta como el inicio de un comentario a pesar del carácter de escape. La expresión regular (igualmente válida en mi caso, aunque no en general)

/\b/\\(.*)\/\b/g

tampoco funciona. Creo que el segundo /termina la expresión regular a pesar del carácter de escape.

Lo que me funciona es representar /como \x2F, que es la representación hexadecimal de /. Creo que es más eficiente y comprensible que usarlo new RegExp, pero, por supuesto, necesita un comentario para identificar el código hexadecimal.


0

Forward Slash es un carácter especial, por lo que debe agregar una barra invertida antes de la barra diagonal para que funcione.

$patterm = "/[0-9]{2}+(?:-|.|\/)+[a-zA-Z]{3}+(?:-|.|\/)+[0-9]{4}/";

donde / representa la búsqueda de / De esta manera

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.