2011-09-10 10 views
8

¿Cómo se puede truncar una oración a un cierto número de palabras (Nota: no letras)?Truncar la oración a un cierto número de palabras

Pensé usar split(" "), pero ¿cómo puedo contar las palabras?

Por ejemplo:

  • Javascript word count cut off =>Javascript word count
  • Want better search results? See our search tips! =>Want better search
+7

¿Qué has probado? ¿Qué no funcionó? ¿Con qué tienes dificultades exactamente? – Oded

+0

@Oded, muchas de las respuestas usan 'cadena de longitud' para cortar letras. para que las palabras se rompan –

+0

@fish: ¡Eso no es lo que pidió Oded! –

Respuesta

24

Puede utilizar split[MDN] y join[MDN].

"Want better search results? See our search tips".split(" ").splice(0,3).join(" ") 
+0

genial, gracias a una respuesta rápida. –

+3

@fish: La próxima vez publique sus intentos y describa sus dificultades, en lugar de usar SO como sitio de referencia o "por favor haga esto para mí". ¡Aclamaciones! –

+1

@Tomalak Geret'kal, de acuerdo, discúlpeme como titular para aprender tecnología web. –

0

La división funciona, como usted lo ha descrito. Si utiliza una expresión regular, sin embargo, usted no tiene que dividir toda la cadena:

var str = "Lions and tigers and bears"; 
var exp = /[A-Z|a-z]+/g; 

var a = exp.exec(str); // Lions 
var b = exp.exec(str); // and 
var c = exp.exec(str); // tigers 
+0

'[A-Z | a-z]' coincidirá con 'A-Z',' | 'y' a-z'. Dentro de una clase de personaje, '|' no tiene ningún significado especial. Si desea utilizar la insensibilidad a mayúsculas y minúsculas, simplemente use el modificador 'i'. Mejor sería usar '\ w' de todos modos:'/\ w +/g'. –

+0

@Timbits, que también es un método excelente, pero si 'str' es en chino o en latín, o incluso en json, no es fácil utilizar'/[A-Z | a-z] +/g'. –

3

Aquí es una función de "leer más" que escribí para mi aplicación Meteor. Acepta un parámetro de maxWords y elimina las etiquetas html mediante el método de jquery's text().

Espero que ayude!

function readMore(string, maxWords) {  
    var strippedString = $("<p>" + string + "</p>").text().trim();  
    var array = strippedString.split(" "); 
    var string = array.splice(0, maxWords).join(" "); 

    if(array.length > maxWords) { 
     string += "..."; 
    } 

     return string ; 
} 
Cuestiones relacionadas