Estoy tratando de crear una expresión regular para que coincida con una cadena, que tiene un marcador de posición * . El problema para mí es que este marcador de posición podría tener opcionalmente algunos caracteres al frente:
Se me ocurrió /(.*)(\w)\*(.*)/ :
This is ju* an example This is * an example T* is just an example * is just an example This is just an ex* This is just an *Necesito obtener tres partes de cada cadena:
Así que el resultado debería ser:
This is|ju|an example This is|<null>|an example <null>|T|is just an example <null>|<null>|is just an example This is just an|ex|<null> This is just an|<null>|<null>Lo que probé es:
^(.*?)[^\S\n]*([^\s*]*)\*[^\S\n]*(.*)$Ver una demostración en línea
^ - Anclaje de línea de salida;(.*?) - Su primer grupo de captura con 0+ (perezosos) caracteres que no sean de nueva línea;[^\S\n]* - 0+ (Greedy) carácter que no son caracteres que no sean espacios en blanco o saltos de línea. Supongo que puede cambiar a \s* en su aplicación, pero para fines de demostración usé esto;([^\s*]*) - Un segundo grupo de captura para hacer coincidir 0+ (Codiciosos) caracteres que no sean espacios en blanco o asteriscos;\*[^\S\n]* - Asteriscos literales, seguidos de 0+ (Greedy) caracteres que no son espacios en blanco ni saltos de línea;(.*) - Un tercer grupo de captura para capturar 0+ (Codiciosos) caracteres que no sean de nueva línea;$ - Anclaje de línea final.Esto parece coincidir con sus requisitos.
/^(.*?)(\w*)\*(.*)/g const arr = [ "This is ju* an example", "This is * an example", "T* is just an example", "* is just an example", "This is just an ex*", "This is just an *", ]; console.log( arr.map(x => { const myRegexp = /^(.*?)(\w*)\*(.*)/g; // new RegExp("", "gm"); const match = myRegexp.exec(x); return match.map(x => x.trim()); }) ); .as-console-wrapper { max-height: 100vh !important; }Referencia: emparejamiento codicioso y perezoso
Usa tuCadena.split(/(\w**)/)
las respuestas seran:
[ "Esto es", "ju*", "un ejemplo"]
[ "Esto es un ejemplo" ]
[ "", "T*", "es solo un ejemplo" ]
[ "", "*", "es solo un ejemplo" ]
[ "Esto es solo un ", "ex*", "" ]
[ "Esto es solo un ", "*", "" ]
maneje los espacios en blanco y * para que coincida con su resultado