¿Hay una forma más elegante/mejor de realizar el reemplazo a continuación? Quiero separar AM y PM de todas las palabras y agregar una coma para que se represente de la siguiente manera
Monday, AM Monday, PM Wednesday, AM Wednesday, PM Thursday, AM Friday, AM Friday, PM <script> let str = "MondayAM,MondayPM,TuesdayAM,WednesdayAM,ThursdayAM,ThursdayPM"; str = str.replace(/,/g,'\n').replace(/AM/g,", AM").replace(/PM/g,", PM") console.log(str); document.write("<pre>"+str+"</pre>") </script>Para ambos formatos de datos con una coma o un espacio:
([^\s,]+)([AP]M)\b[, \t]*Explicación
([^\s,]+) Grupo de captura 1, emparejar 1+ caracteres que no sean espacios en blanco que no sean una coma([AP]M) Grupo de captura 2, haga coincidir AM o PM\b Un límite de palabras para evitar una coincidencia parcial de palabras[, \t]* Coincide con espacios, tabulaciones o comas opcionalesDemostración de expresiones regulares
const regex = /([^\s,]+)([AP]M)\b[, \t]*/g; const str = `MondayAM MondayPM TuesdayAM WednesdayAM ThursdayAM ThursdayPM MondayAM,MondayPM,TuesdayAM,WednesdayAM,ThursdayAM,ThursdayPM `; const subst = `$1, $2\n`; console.log(str.replace(regex, `$1, $2\n`));Otra variación que coincide solo con los caracteres iniciales A-Za-z y suponiendo que solo hay una coma como separador:
([AZ][az]+)([AP]M)\b,?Puede usar el reemplazo de grupo, reemplazar AM o PM , con , $1 , $1 se refiere a AM o PM que se encuentra en el texto.
let str = "MondayAM MondayPM TuesdayAM WednesdayAM ThursdayAM ThursdayPM"; str = str.replace(/(AM|PM)/g, ", $1") console.log(str);Sí, puedes hacerlo en una sola expresión regular. Como está haciendo lo mismo con "AM" y "PM", puede escribir una expresión regular que capture cualquiera y use la expresión $N en lugar del valor constante, para devolver el grupo capturado a la cadena de salida.
También puede reemplazar "," con una nueva línea en la misma expresión. (Utilicé (,|$) que significa coma o final de cadena, porque no hay coma después de la última entrada).
<script> let str = "MondayAM,MondayPM,TuesdayAM,WednesdayAM,ThursdayAM,ThursdayPM"; str = str.replace(/([AP]M)(,|$)/g,", $1\n") console.log(str); document.write("<pre>"+str+"</pre>") </script>