La cadena de destino parece un número seguido de un espacio y luego de una o más letras, por ejemplo, 1 Foo o 2 Foo bar .
Puedo usar [^\d\s].+ , pero no funciona para letras individuales, por ejemplo, 3 A .
¿Qué se puede hacer aquí?
La solución que uso actualmente es reemplazar en lugar de hacer coincidir.
from \d\s(.+) to $1Pero como purista, prefiero usar reemplazar si y solo si no queremos decir "reemplazar algo con nada". Cuando necesitamos reemplazar algo con nada, preferiría usar la coincidencia.
Simplemente elimine los corchetes. Los corchetes por sí solos indican "cualquiera de este conjunto", por lo que está haciendo coincidir \d o \s . Cuando también agrega un ^ adentro, no está indicando el comienzo de la cadena, pero está negando el conjunto. Entonces, resumiendo, su expresión regular significa:
Haga coincidir un solo carácter que puede ser todo excepto un dígito y un espacio en blanco, luego haga coincidir todo.
Si elimina los corchetes, coincidirá con \d seguido de \s , y el símbolo ^ significará "comienzo de la cadena".
/^\d\s(.+)/Prefiero usar un reemplazo de expresiones regulares aquí:
var input = ["1 Foo", "2 Foo Bar", "No Numbers Here"]; var output = input.map(x => x.replace(/^\d+ /, "")); console.log(output);Si no entendí mal tu pregunta, esto podría ser lo que quieres:
excluir capturar el número y el espacio al principio
(?!^\d+)(?!\s+).* Esto coincide con 1 Foo Bar a Foo Bar y 3 A a A