Estoy tratando de hacer coincidir una serie de texto después de un carácter de dos puntos (:), mientras ignoro los caracteres de espacio en blanco antes y después.

Ejemplo

someWord: a series of text
-or-
someWord:        a series of text  

Me gustaría obtener el resultado de 'una serie de texto', ignorando cualquier espacio en blanco después de los dos puntos, pero incluyendo el espacio en blanco dentro de la frase de texto.

¡Mis intentos de encontrar la expresión regular para esto han fallado, esperando que la comunidad SO pueda ayudar!

Aquí está mi mala expresión regular (me disculpo de antemano por lo que está a punto de ver):

:[^ ](\w*)+?(?=\b)
0
Ron I 11 may. 2016 a las 11:17

3 respuestas

La mejor respuesta

Si solo tiene uno de estos que está haciendo coincidir (no varios en la cadena; vea mi pregunta sobre la pregunta), entonces creo que está buscando

:\s*(.*?)\s*$
  • : coincide con los dos puntos
  • \s* coincide con cero o más caracteres de espacio en blanco (codicioso)
  • (...) es el grupo de captura para el texto de destino
  • .*? es una captura no codiciosa de cualquier serie de personajes
  • \s*$ es una captura codiciosa al final del espacio en blanco
var s1 = "someWord:     a series of text    ";
var match = /:\s*(.*?)\s*$/.exec(s1);
log("Input: '" + s1 + "'");
log("Result: '" + match[1] + "'");

function log(msg) {
  var p = document.createElement('pre');
  p.appendChild(
    document.createTextNode(msg)
  );
  document.body.appendChild(p);
}
1
T.J. Crowder 11 may. 2016 a las 08:29
> "someWord: a series of text".match(/:\s*(.*)$/)
[": a series of text", "a series of text"]

Para obtener el texto, puede usar el primer índice que se refiere al grupo capturado y para los espacios al final de la cadena puede usar trim ():

> "someWord:        a series of text  ".match(/:\s*(.*)$/)[1].trim()
"a series of text"
2
riteshtch 11 may. 2016 a las 08:24

Para este caso particular, puede usar split:

document.write("someWord: a series of text".split(':')[1].trim());
document.write('<br>'); // just to insert a new line for printing
document.write("someWord:        a series of text".split(':')[1].trim());
1
AKS 11 may. 2016 a las 08:31