Estoy tratando de dividir una cadena y dejar intacto el delimitador. Me estoy acercando bastante, pero no puedo entenderlo completamente. He encontrado muchos ejemplos en Stack Overflow, pero todavía me encuentro con un problema que no puedo resolver. Aquí está el código:
"This is a string with ${G:VarSome:G} text".split(/\$\{(.+?(}\(.+?\)|}))/g)El código anterior produce:
['This is a string with ', 'G:VarSome:G}', '}', ' text']El resultado que busco es:
['This is a string with ', '${G:VarSome:G}', ' text']El patrón ${G:SomeVar:G} es un sistema de plantillas donde se inyectarán variables. También hay otros formatos de variables, por ejemplo, ${G:AnotherVar:1}, ${G:DifferentVar:5}, etc. Después de obtener la cadena dividida, haré una búsqueda de variables en el sistema para inyectar la variable correspondiente.
Tiene un grupo de captura adicional dentro de la expresión regular, esto le dará un solo grupo.
const result = "This is a string with ${G:VarSome:G} text".split(/(\${.+?})/g); console.log(result); La expresión regular que captura un solo grupo de captura se ve así. devuelve todo lo capturado dentro ()
/(\${.+?})/g
Esto debería capturar los ejemplos proporcionados. expresión regular101
Se construye obteniendo primero ${ y luego obteniendo uno o más caracteres perezosamente ( .+? ) hasta que encuentra un } .
Puede usar esta expresión regular para dividir:
/(\${[^}]*})/Código:
var s = 'This is a string with ${G:VarSome:G} text'; var arr = s.split(/(\${[^}]*})/); console.log(arr);Aquí:
\${[^}]*} : coincidirá con ${ seguido de 0 o más caracteres que no sean } seguidos de }