2011-02-18 61 views
16

tengo la siguiente cadena:extraer la primera palabra de una cadena - expresiones regulares


str1 = "cat-one,cat2,cat-3"; 
OR 
str1 = "catone,cat-2,cat3"; 
OR 
str1 = "catone"; 
OR 
str1 = "cat-one"; 

El punto aquí es palabras pueden/no pueden tener "-" s en ella

El uso de expresiones regulares: Cómo podría extraer la primera palabra?

Agradecemos cualquier ayuda al respecto.

Gracias, L

+0

Esto coincide con todos los caracteres hasta el primer coma:^[^,] + –

+0

Esto es lo que probé (¡y funciona!) y espero que sea correcto: alert (str.replace (/^([^]) (. *)? /, "$ 1 ")); – lshettyl

+0

Si eso es todo lo que quieres hacer, esto funcionaría igual de bien: alerta (str.substring (0, str.indexOf (','))) –

Respuesta

35

Es bastante fácil, basta con incluir caracteres permitidos en paréntesis:

^([\w\-]+)

+1

^([\ w -] +) o^[\ w -] + –

+1

Dijo extraer, así que supuse que necesitaba los paréntesis. –

+0

Soy nuevo aquí, entonces me puede estar perdiendo algo, pero copié "^ ([\ w -]) +" de su respuesta (¿temporal?) Para probarlo. –

1

Un enfoque no usar una expresión regular: suponiendo que la primera palabra está delimitado siempre por una coma " ", se puede hacer esto:

var str1 = "cat-one"; 
var i = str1.indexOf(","); 
var firstTerm = i == -1 ? str1 : str1.substring(0, i); 

Editar: º asumida es una pregunta de javascript, por alguna razón.

+1

regex es en realidad más fácil esta vez, creo. :) Tampoco dijo que estaba usando javascript. –

+1

@Seth: sí, tienes razón. No sé por qué pensé que era js. Tal vez porque no hay definición de tipo? –

0

Si alguien, un día le gustaría hacerlo en Swift aquí vas con una extensión:

extension String { 

    func firstWord() -> String? { 
     var error : NSError? 
     let internalExpression = NSRegularExpression(pattern: "^[a-zA-Z0-9]*", options: .CaseInsensitive, error: &error)! 
     let matches = internalExpression.matchesInString(self, options: nil, range:NSMakeRange(0, countElements(self))) 
     if (matches.count > 0) { 
      let range = (matches[0] as NSTextCheckingResult).range 
      return (self as NSString).substringWithRange(range) 
     } 
     return nil 
    } 
} 

Para usarlo simplemente escribir:

myString.firstWord() 
+0

En este caso, la respuesta de Richard H de evitar la expresión regular directa es probablemente la mejor y simplemente use esta expresión Swift; str.componentsSeparatedByString (",") [0] –

+0

De hecho, tiene razón. Pero si busca algo genérico, evitaría el uso de soluciones "codificadas". Quizás la próxima vez el separador podría ser "_", "-", ".", Etc. –

Cuestiones relacionadas