2009-08-11 9 views
17

Ho una stringa del formato: string:num dove num è un numero qualsiasi ma la stringa è una stringa nota a cui devo corrispondere. Mi piacerebbe avere questo in un'istruzione if come:Corrispondenza dell'espressione regolare Javascript sulla stringa seguita dal numero?

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

Se sei tremante con espressioni regolari di Java, strumento aro und con http://www.regexplanet.com/simple/ :) –

+1

@Matt Ball: quel sito utilizza ** regex Java **; in base ai tag, l'OP sta lavorando con JavaScript. –

+0

Domanda utile – Jethik

risposta

39

Si vuole ...

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

Ciò include:

  1. ^ all'inizio della stringa
  2. string: la "stringa" letterale che hai menzionato
  3. (.....) Questo sottoespressione, che è possibile consultare in seguito, se avete bisogno di sapere che numero è nella stringa (anche se in questo caso particolare, si potrebbe anche semplicemente sostituire 'string:' con '')
  4. [0-9]un personaggio tra 0 e 9 (cioè, una cifra)
  5. + Deve avere almeno un "di quelli" (cioè, le cifre di cui sopra), ma può avere qualsiasi numero
  6. $ fine della stringa
+0

+1 ma il paren e il + potrebbero essere più del necessario, a seconda di cosa esattamente l'OP vuole - spiegherei il significato per lui. – annakata

+0

@VoteyDisciple: - var temp = "seleziona * da' Demo' AS 'D1',' Demo2' AS 'D2'"; Voglio selezionare il testo dopo 'AS' i.e D1 e D2 usando l'espressione regolare.? – Sanjiv

+0

@Sanjiv Questo non è correlato a questa domanda. Per fare una nuova domanda, vuoi il pulsante "Chiedi domanda" nella parte superiore della pagina. – VoteyDisciple

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

Quanto sopra è indicato per i numeri interi; se si desidera che i numeri in virgola, o anche la notazione scientifica galleggiante (come è intesa in linguaggi C-like), si vorrà qualcosa di simile:

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

È possibile rimuovere il primo [+ -]? se non ti interessa il segno, il (. [0-9] +)? se non ti importa dei punti mobili, e il ([eE] [+ -]? [0-9] +)? se non ti preoccupi degli esponenti della notazione scientifica. Ma se c'è una possibilità che vuoi abbinare a quelle, vuoi includerle come opzionali nella regex.

+0

La mia risposta NON forza la stringa a far corrispondere le regole complete della notazione scientifica, che comporta esattamente una cifra a sinistra del punto decimale. Se lo desideri, ti consigliamo qualcosa come ([+ -]? [0-9] + (\. [0-9] +)? | [+ -]? [0-9] (\. [0-9] +)? ([EE] [+ -]? [0-9] +)?) La prima parte, a sinistra del "|" carattere, richiede un segno opzionale, 1+ cifre, e opzionalmente un decimale w/più cifre. La seconda parte richiede un numero di notazione scientifica valido, includendo solo una cifra a sinistra del decimale. È possibile modificare il "+" dopo le cifre nel punto decimale su "*" se si desidera consentire numeri come "5." anche. –

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

Number è un numero intero nell'esempio precedente.

+1

Perché dovresti mettere quella doppia negazione all'inizio? – VoteyDisciple

+0

Per provare a costringerne un booleano. Stai meglio usando .test() qui –

3

Se si desidera solo verificare se la stringa di input corrisponde al modello, è possibile utilizzare la funzione RegExp.test:

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

o con la funzione String.search:

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

Se si desidera convalidare e ottieni il numero:

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

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