2010-03-17 28 views
6

Necesito ayuda. Estoy buscando una expresión regular que coincida con el último carácter espacial en una cadena. Estoy usando JavaScript y ASP clásico.Regex para que coincida con el último carácter de espacio

Tengo una larga cadena de texto que recorto a 100 caracteres. Me gustaría eliminar el último carácter para evitar un error ortográfico si el recorte corta una palabra debido al límite de 100 caracteres.

regex.replace(/[ ]$.*?/ig, ''); 

¿Alguien con ideas? Gracias.

+2

Quizás debería haber sido más preciso sobre lo que está buscando. "Emparejar todo desde el último espacio hasta el final" encajaría mejor. – Gumbo

Respuesta

25

Según tengo entendido, debe eliminar el último espacio y todo lo demás, ¿no?

str = str.replace(/\s+\S*$/, "") 
+0

Perfecto, gracias a Stereofrog exactamente lo que necesitaba –

+2

Me alegra oír que está funcionando, pero Gumbo tiene razón - la próxima vez intenta ser más preciso – user187291

1

La expresión regular /^.+ [^ ]*$/ coincidirá solo con el último espacio de una línea.

+0

No, esto coincidirá con toda la línea, más o menos. – Tomalak

+0

sí lo hará, pero se especifica para el último espacio, lo siento, no era específico. Un grupo de captura bien ubicado le dará lo que quiera según esto. – zellio

7

Pruebe un lookahead assertion:

/ (?=[^ ]*$)/ 

Y por espacios en blanco arbitrarias:

/\s(?=\S*$)/ 
+0

¿Dónde dirías que es el mejor lugar para aprender este arte? – dclowd9901

+0

@Gumbo: ¿Me estoy perdiendo algo o esto es innecesariamente complicado? – Tomalak

+0

@ dclowd9901: Es solo práctica. Cuanto más lo use, más hábil obtendrá. – Gumbo

2

Eso sería

/ +$/ 

un carácter de espacio (), al menos una vez (+), al final de la línea ())

Tenga en cuenta que no es necesario colocar el espacio en una clase de caracteres, a menos que desee hacer coincidir más de un carácter de espacio, por ejemplo, las pestañas [\t ].

para que coincida realmente la sola último espacio solamente, usar / $/


EDITAR: Para cortar todo después de que el último espacio (pensar en ello, esto es lo que realidad pareces desea, puede utilizar:

regex.replace(/ +\S*$/ig, ''); 

donde la expresión regular significa: "al menos un espacio, y cualquier chara no está en blanco cters after it (\S*), al final de la línea ($). ".

Esto solo puede coincidir con el último bit de una línea después del último espacio. Como efecto secundario, la cuerda se recorta al final.

0

Usando res "clásicos", lo que te gustaría sería " [^ ]*$" - es decir, un espacio en blanco seguido de un número arbitrario de caracteres no-espacio seguido por el final de la línea. Sin embargo, los "caracteres no espaciales" podrían ajustarse a tu definición de "palabra"; por ejemplo, también te evitarán cortar un número en el medio. Si desea limitar una "palabra" a contener letras, puede usar: " [^A-Za-z]*$" en su lugar.

También tenga en cuenta que de cualquier manera, si una palabra termina exactamente en el centésimo carácter, coincidirá con el espacio anterior, por lo que eliminará esa última palabra completa. Si quieres evitar eso, (probablemente) querrás ver el primer carácter que cortaste, y si es un espacio en blanco, no elimines nada del buffer.

Cuestiones relacionadas