test regulares regular probar online expresiones expresion especiales espacio ejemplos caracteres blanco alfanumerico regex

regulares - javascript regex test



¿Cuál es la expresión regular adecuada para una barra invertida no guardada antes de un personaje? (4)

La mejor solución para esto es hacer su propio análisis sintáctico de cadenas ya que las Expresiones regulares realmente no son compatibles con lo que está tratando de hacer. (representante @ Frank Krueger si vas por este camino, solo estoy repitiendo su consejo)

Sin embargo, di una oportunidad a una expresión regular excluyente. Esto coincidirá con todas las cadenas que no se ajustan a su criterio de "/" seguido de un carácter.

(?:[//][//])(?!(([//](?![//])[a-zA-Z])))

Digamos que quiero representar /q (o cualquier otro "personaje escapado de barra invertida"). Es decir, quiero hacer coincidir /q pero no //q , ya que este último es una barra invertida escapada seguida por una q . Sin embargo, ///q coincidiría, ya que se trata de una barra invertida que escapó con una barra invertida seguida por una barra invertida: q escapó. (Bueno, coincidiría con la /q al final, no con la // al principio).

Sé que necesito una mirada negativa detrás, pero siempre me atan la cabeza en nudos, especialmente porque las propias barras invertidas tienen que ser escapadas en la expresión regular.


Ahora tienes dos problemas .

Simplemente escribe un analizador simple. Si la expresión regular empata su cabeza en nudos ahora, solo espere un mes.


Leon Timmermans obtuvo exactamente lo que estaba buscando. Agregaría una pequeña mejora para los que vienen aquí más tarde:

/(?<!//)(?:////)*//q/

¿El adicional ?: Al comienzo del grupo (////) no lo guarda en ningún dato de coincidencia. No puedo imaginar un escenario donde quisiera que el texto de eso se guarde.


Actualizado: mi nueva y mejorada Perl Regex, compatible con más de 3 barras diagonales inversas:

/(?<!//) # Not preceded by a single backslash (?>////)* # an even number of backslashes //q # Followed by a /q /x;

o si su biblioteca de expresiones regulares no es compatible con la sintaxis extendida.

/(?<!//)(?>////)*//q/

Salida de mi programa de prueba:

q does not match /q does match //q does not match ///q does match ////q does not match /////q does match

Versión antigua

/(?:(?&lt;!//)|(?&lt;=////))//q/