Digamos que tengo celdas de texto de entrada de datos delimitados por dos puntos, y quiero dividir eso en coincidencias basadas en ejecuciones de uno o más dos puntos, ignorando los dos puntos iniciales.
De este modo,
data_A:data_B:data_C: se divide en data_A: , data_B: , data_C::data_A:data_B:data_C: se divide en data_A: , data_B: , data_C:::data_A:data_B:::data_C: se divide en data_A: , data_B::: , data_C: Una expresión regular de /[^:].*?(?::+|$)/g parece funcionar. https://regex101.com/r/JuMZ65/1
Sin embargo, necesito hacer que esto funcione donde el carácter de dos puntos podría estar en una celda de datos, en cuyo caso se escribiría como \: .
La expresión regular anterior falla:
data_A::data_\:B: se divide en data_A:: , data_\: , B:data_A:: , data_\:BAdemás, la barra invertida en sí podría escaparse, así
data_A::data_\:B:data_\\:C debería dividirse en data_A:: , data_\:B , data_\\: , C ¿Qué expresión regular funcionará, manejando \: y \\: ?
(Mi proceso de pensamiento no es mucho más sofisticado que simplemente arrojar barro a la pared, así que les ahorraré el lío de docenas de ligeras variaciones, la mitad de las cuales simplemente mueren en la mesa).
Puedes usar
/(?:[^:\\]|\\.)+(?::+|$)/g // If the match can have no trailing colons not at the end of string: /(?:[^:\\]|\\.)+:*/gVea la demostración de expresiones regulares . Detalles :
(?:[^:\\]|\\.)+ - una o más apariciones de[^:\\] - cualquier carácter que no sea : y \| - o\\. - un carácter escapado que no sea un carácter de salto de línea(?::+|$) - ya sea uno o más dos puntos o el final de la cadena.