2009-08-11 16 views
17

Mam ciąg formatu: string:num gdzie liczba jest dowolną liczbą, ale ciąg jest znanym łańcuchem, który muszę dopasować. Chciałbym mieć to w if jak:Dopasowanie wyrażenia regularnego JavaScript na łańcuchu, po którym następuje liczba?

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

Jeśli jesteś chwiejny z wyrażeń regularnych Java, narzędzie aro und z http://www.regexplanet.com/simple/ :) –

+1

@Matt Ball: ta strona używa ** wyrażeń regularnych Java **; zgodnie z tagami, OP pracuje z JavaScript. –

+0

Pomocne pytanie – Jethik

Odpowiedz

39

Chcesz ...

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

ta obejmuje:

  1. ^ początek napisu
  2. string: literał "string:" wspomniałeś
  3. (.....) Ten podwyrażenie, które można odnieść do później, jeśli chcesz wiedzieć który numer znajduje się w ciąg (chociaż w tym konkretnym przypadku, można też po prostu zastąpić 'string:' z '')
  4. [0-9] znaków pomiędzy 0 i 9 (tj cyfra)
  5. + musi mieć co najmniej jeden „tych” (czyli cyfry wspomniano powyżej), ale może mieć dowolną liczbę
  6. $ koniec łańcucha
+0

+1 ale pareny i + mogą być większe niż wymagane, w zależności od tego, co dokładnie OP chce - wyjaśniłem mu znaczenie. – annakata

+0

@VoteyDisciple: - var temp = "wybierz * z' Demo' AS 'D1',' Demo2' AS 'D2'; Chcę wybrać tekst po "AS" i.e D1 i D2 używają wyrażeń regularnych.? – Sanjiv

+0

@Sanjiv To nie jest związane z tym pytaniem. Aby zadać nowe pytanie, potrzebujesz przycisku "Zadaj pytanie" u góry strony. – VoteyDisciple

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

Powyższe jest dobre dla liczb całkowitych; jeśli chcesz liczb zmiennoprzecinkowych, a nawet notacji naukowej (co jest zrozumiałe w językach C-podobnych), będziemy chcieli coś takiego:

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

można usunąć pierwszy [+ -]? jeśli nie dbasz o znak, (. [0-9] +)? jeśli nie przejmujesz się zmiennymi punktami i ([eE] [+ -]? [0-9] +)? jeśli nie zależy ci na wykładnikach naukowych. Ale jeśli istnieje szansa, że ​​chcesz je dopasować, chcesz uwzględnić je jako opcjonalne w regex.

+0

Moja odpowiedź NIE wymusza na łańcuchu pasujących do pełnych reguł notacji naukowej, która zawiera dokładnie jedną cyfrę po przecinku. Jeśli chcesz, będziesz potrzebować czegoś takiego jak ([+ -]? [0-9] + (\. [0-9] +)? | [+ -]? [0-9] (\. [0-9] +)? ([EE] [+ -]? [0-9] +)?) Pierwsza część, po lewej stronie "|" znak, wymaga opcjonalnego znaku, 1 + cyfry i ewentualnie dziesiętnej z większej liczby cyfr. Druga część wymaga poprawnego numeru notacji naukowej, zawierającego tylko jedną cyfrę po przecinku. Możesz zmienić "+" po cyfrach w przecinku dziesiętnym na "*", jeśli chcesz zezwolić na liczby takie jak "5." także. –

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

liczba jest liczbą całkowitą w przykładzie powyżej.

+1

Dlaczego na początku miałbyś tę podwójną negację? – VoteyDisciple

+0

Aby spróbować wymusić na nim boolean. Lepiej skorzystaj z .test() tutaj –

3

Jeśli chcesz tylko sprawdzić, czy ciąg wejściowy pasuje do wzorca, można użyć RegExp.test funkcję:

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

lub z funkcją String.search:

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

Jeśli chcesz, aby potwierdzić i uzyskaj numer:

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

if (match){ 
    number = +match[1]; // unary plus to convert to number 
    // work with it 
} 
Powiązane problemy