2009-08-11 12 views
17

Tengo una cadena del formato: string:num donde num es cualquier número, pero la cadena es una cadena conocida con la que necesito hacer coincidir. Me gustaría tener esto en una sentencia if como:¿La coincidencia de expresión regular de Javascript en la cadena seguido de un número?

if(it matches 'string:' followed by a number) { 
    //do something 
} 
+1

Si tiene problemas con las expresiones regulares de Java, herramienta aro und con http://www.regexplanet.com/simple/ :) –

+1

@Matt Ball: ese sitio usa ** expresiones regulares de Java **; de acuerdo con las etiquetas, OP está trabajando con JavaScript. –

+0

Pregunta útil – Jethik

Respuesta

39

¿Quieres ...

if (stringYouHave.match(/^string:([0-9]+)$/)) { 
    // do something 
} 

Esto incluye:

  1. ^ principio de la cadena
  2. string: el literal "cadena": usted mencionó
  3. (.....) Este sub-expresión, la cual se puede hacer referencia a más tarde si lo que necesita saber cuales número se encuentra en la cadena (aunque en este caso particular, se podría también acaba de sustituir 'string:' con '')
  4. [0-9]un carácter entre 0 y 9 (es decir, un dígito)
  5. + debe tener al menos uno "de aquellos" (es decir, los dígitos se ha mencionado anteriormente), pero puede tener cualquier número
  6. $ final de la cadena
+0

+1 pero los parens y el + podrían ser más de lo requerido, dependiendo de lo que exactamente el OP desee: le explicaría el significado para él. – annakata

+0

@VoteyDisciple: - var temp = "select * from' Demo' AS 'D1',' Demo2' AS 'D2'"; Quiero seleccionar texto después de 'AS' i.e D1 y D2 usando expresiones regulares. – Sanjiv

+0

@Sanjiv Eso no está relacionado con esta pregunta. Para hacer una nueva pregunta, desea el botón "Preguntar" en la parte superior de la página. – VoteyDisciple

4
if(it.match(/^string:\d+$/) ({ 
    ... 
} 
1

Lo anterior es bueno para números enteros; si desea que los números de punto flotante, o incluso la notación científica (como se entiende en lenguajes de programación como C), querrá algo como esto:

if (stringYouHave.match(/^string:[+-]?[0-9]+(\.[0-9]+)?([eE][+-]?[0-9]+)?$/)) 
{ 
    // do something 
} 

puede quitar el primer [+ -]? si no te importa el signo, el (. [0-9] +)? si no te importan los puntos flotantes, y el ([eE] [+ -]? [0-9] +)? si no te importan los exponentes de la notación científica. Pero si existe la posibilidad de que desee hacer coincidir esos, desea incluirlos como opcional en la expresión regular.

+0

Mi respuesta NO obliga a la cuerda a coincidir con las reglas completas de notación científica, lo que implica exactamente un dígito a la izquierda del punto decimal. Si quieres eso, querrás algo como ([+ -]? [0-9] + (\. [0-9] +)? | [+ -]? [0-9] (\. [0-9] +)? ([EE] [+ -]? [0-9] +)?) La primera parte, a la izquierda de "|" carácter, requiere un signo opcional, dígitos 1+ y, opcionalmente, un decimal con más dígitos. La segunda parte requiere un número de notación científica válido, que incluye solo un dígito a la izquierda del decimal. Puede cambiar el "+" después de los dígitos en el punto decimal a "*" si desea permitir números como "5". también. –

1
if(teststring.match(new RegExp("^" + knownstring + ":\d+$"))) { 
    // some code 
} 
0
if(!!"string:5456".match(/^string:\d+$/)) { ... } 

número es un número entero en el ejemplo anterior.

+1

¿Por qué pondría esa doble negación al principio? – VoteyDisciple

+0

Para tratar de forzar un booleano. Será mejor que uses .test() aquí –

3

Si sólo desea comprobar si la cadena de entrada coincide con el patrón, puede utilizar la función RegExp.test:

if (/^string:[0-9]+$/.test(input)){ 
    //.. 
} 

o con la función String.search:

if (input.search(/^string:[0-9]+$/) != -1){ 
    //.. 
} 

Si desea validar y obtenga el número:

var match = input.match(/^string:([0-9]+)$/), 
    number; 

if (match){ 
    number = +match[1]; // unary plus to convert to number 
    // work with it 
} 
Cuestiones relacionadas