2009-10-14 10 views

Respuesta

0

¿Qué le parece encontrar la posición de -mr, luego obtener la subcadena desde allí + 3?

No es regex pero parece funcionar dada su descripción?

4
var result = "something30-mr200".split("mr")[1]; 

o

var result = "something30-mr200".match(/mr(.*)/)[1]; 
+0

Usted se olvidó de cerrar la cadena '" mr' –

+0

Gracias, ahora fijos – Kamarey

4

Por qué no simplemente:

-mr(\d+) 

a continuación, obtener el contenido del grupo de captura?

2

¿Qué hay de:

function getNumber(input) { // rename with a meaningful name 
    var match = input.match(/^.*-mr(\d+)$/); 

    if (match) { // check if the input string matched the pattern 
    return match[1]; // get the capturing group 
    } 
} 

getNumber("something30-mr200"); // "200" 
+0

Wow, solución casi idéntica, prácticamente al mismo tiempo. Saludos :). – treznik

+1

¿Estás seguro de que quieres probar 'match [1]'? Esto se evaluará a * false * si es '0'. – Gumbo

+1

@Gumbo: No va a evaluar falso, porque las coincidencias son ** Cadenas ** no ** Números **, i t solo evaluará a falso si match [1] es una cadena vacía. – CMS

18

Se puede utilizar una expresión regular como el que Bart le dio, pero se sugiere emplear partido en lugar de reemplazar, ya que en caso de que no se encuentra una coincidencia, el resultado es la cadena completa cuando se utiliza replace, mientras que null cuando se usa match, lo que parece más lógico. (como un general sin embargo).

Algo como esto haría el truco:

functiong getNumber(string) { 
    var matches = string.match(/-mr([0-9]+)/); 
    return matches[1]; 
} 
getNumber("something30-mr200"); 
1

Esto puede funcionar para usted:.

// Perform the reg exp test 
new RegExp(".*-mr(\d+)").test("something30-mr200"); 
// result will equal the value of the first subexpression 
var result = RegExp.$1; 
+0

No es necesario incluir el primer '. *' Y el guión no necesita escaparse. Esto también funciona: '" -mr (. *) "'. Pero el '. *' Es peligroso: si hay mucho más texto después de '" -mr "' el '. *' Lo "comerá". Por supuesto, el OP no era realmente claro sobre qué texto podría venir después de '" -mr "'. –

+0

Ese es un buen punto. Asumí que el OP querría todo después de "-mr". Modifiqué el código para eliminar el escape antes del guión y restringir la subexpresión a los dígitos. Escapo de todo por costumbre más que cualquier otra cosa. :) –

Cuestiones relacionadas