Digamos que tengo una cadena: "This is a string-thing" . Quiero dividir tanto el espacio como el guión, pero mantengo los separadores junto con la palabra anterior => ["This ", "is ", "a ", "string-", "thing"]
Actualmente estoy haciendo esto usando la siguiente expresión regular:
string.split(/(?<=[\s-])/g)Esto hace lo que se supone que debe hacer... al menos en Chrome. Según tengo entendido, Safari no es compatible con lookbehind en regExp, lo que rompe el código. ¿Hay alguna manera de hacer esto sin mirar atrás?
Podrías unir las palabras sin mirar atrás.
const string = "This is a string-thing", parts = string.match(/.+?([\s-]|$)/g); console.log(parts);También puede usar dividir con un grupo de captura para mantener el valor para dividir y eliminar las entradas vacías de la matriz resultante.
El patrón coincide
( Grupo de captura 1[^\s-]* Repetir más de 0 veces haciendo coincidir cualquier carácter que no sea un carácter de espacio en blanco o -[\s-] Coincide con un carácter de espacio en blanco o -) Cerrar grupo 1 Tenga en cuenta que \s también puede coincidir con una nueva línea.
const s = "This is a string-thing"; const regex = /([^\s-]*[\s-])/; console.log(s.split(regex).filter(Boolean));