tengo mis expresiones regulares /'(.*)(?:(?:'\s*,\s*)|(?:'\)))/
y mi código de prueba ('He said, "You're cool."' , 'Rawr')
(Mi código de prueba simula parámetros que se pasa a una función.)
voy a explicar mi expresión regular como yo lo entiendo y es de esperar que algunos de ustedes puede arrojar algo de luz sobre mi problema.
1) /'
significa que al comienzo de la cadena coincidente, es necesario que haya '
2) (.*)
medios de captura de cualquier carácter excepto \n
0 o más veces
3) (?:(?:4)|(?:5))
medios no captan, pero tratan de hacer el paso 4 y si no funciona el paso 5 tRY
4) (?:'\s*,\s*)
medios no captan, pero es necesario que haya un '
con 0 o más caracteres de espacio en blanco seguido de un ,
con 0 o más caracteres de espacio en blanco
5) (?:'\))
medios no captan, pero es necesario que haya ')
por lo que parece que debería devolver este (y esto es lo que quiero):
'
+ He said, "You're cool."
+ ' ,
pero vuelve:
'
+ He said, "You're cool."' , 'Rawr
+ ')
Si cambio de código de prueba a ('He said, "You're cool."' , 'Rawr'
(sin paréntesis final) devuelve lo que quiero, pero tan pronto como añado que último paréntesis, a continuación, parece que mi operador OR hace lo que quiere. Quiero probar primero si hay una coma, y romper allí si hay una, y si no hay una marca para un paréntesis.
He intentado cambiar los puntos del paso 4 y el paso 5, pero aun así el operador OR parece siempre predeterminado al lado (?:'\))
. ¿Cómo puedo igualar la cantidad más corta posible?RegExp - ¿Cómo puedo igualar la cantidad más corta posible?
8
A
Respuesta
15
No creo que su problema sea el operador OR, sino el greediness del .*
. Coincidirá con la cadena completa y luego volver -cargar hasta que coincidan las siguientes expresiones. La primera coincidencia en este proceso de retroceso será 'He said, "You're cool."' , 'Rawr
+ ')
. Pruebe .*?
en su lugar!
Cuestiones relacionadas
- 1. más corta Rubí Quine
- 2. ¿Longitud de la línea más corta?
- 3. ¿Cuál es la forma más corta de contar la cantidad de elementos en un generador/iterador?
- 4. PHP más corta/cadena más larga en la gama
- 5. Convertir un número a la cadena de caracteres más corta posible conservando la singularidad
- 6. forma más corta de escribir jQuery $ (document) La función ready
- 7. ¿Es posible cambiar el dialecto regexp vim?
- 8. ¿Cómo puedo contar la cantidad de niños?
- 9. ¿Qué es más rápido, XPath o Regexp?
- 10. ¿Cómo puedo poner [] (corchetes) en RegExp javascript?
- 11. ¿La manera más corta de comprobar el cuadrado perfecto?
- 12. ¿Calcula la forma más corta de rotar, derecha o izquierda?
- 13. Encontrar la ruta más corta usando el algoritmo de Dijkstra
- 14. ¿Es posible la negación del grupo Java RegExp?
- 15. recorte uuid más para hacer cadena corta
- 16. Networkx - Longitud de ruta más corta
- 17. Reduce la cantidad de archivos de configuración a la menor cantidad posible
- 18. cadena más corta dentro de la misma ruta (rama)
- 19. Encontrar la ruta globalmente más corta en trapezoides no degeneradas
- 20. la distancia más corta entre dos puntos (conjunto disjunto)
- 21. consulta para obtener tercera cantidad más grande y la segunda mayor cantidad de la mesa
- 22. Scala patrón con o igualar
- 23. Algoritmo para encontrar la ruta más corta, con obstáculos
- 24. Búsqueda eficiente de la ruta más corta en gráficos grandes
- 25. Viaje de distancia más corta - punto de encuentro
- 26. ¿Cómo usar la biblioteca de regexp-me?
- 27. Optimización del algoritmo - Ruta más corta entre varios puntos
- 28. función no pudo igualar el tipo
- 29. ¿Puede esta muestra de Haskell ser más corta?
- 30. ¿Cómo puedo encontrar la cantidad de elementos en una matriz?
El comienzo de la cadena sería '/ ^', no '/', fwiw. Personalmente no estoy convencido de que use una expresión regular para lo que estás tratando de hacer, sino más bien como un pequeño analizador. La expresión regular confusa es confusa. –
@DaveNewton - Sí, lo sé. Es por eso que dije al comienzo de la cadena coincidente. Tal vez debería haber dicho al principio de la porción correspondiente de la cadena. O cuando comienza el partido, debe comenzar con un '''. – Aust