2009-08-11 7 views
17

J'ai une chaîne du format: string:num où num est n'importe quel nombre mais chaîne est une chaîne connue que je dois faire correspondre. Je voudrais avoir cela dans une instruction if comme:Expression d'expression régulière Javascript sur une chaîne suivie d'un nombre?

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

Si vous êtes fragile avec les expressions rationnelles Java, l'outil und avec http://www.regexplanet.com/simple/ :) –

+1

@Matt Ball: ce site utilise des expressions rationnelles ** Java **; Selon les tags, l'OP travaille avec JavaScript. –

+0

Question utile – Jethik

Répondre

39

Vous voulez ...

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

Cela comprend:

  1. ^ début de la chaîne
  2. string: la "chaîne" littérale: "vous avez mentionné
  3. (.....) Cette sous-expression, que vous pouvez consulter plus tard si vous avez besoin de savoir quel numéro est dans la chaîne (bien que dans ce cas particulier, vous pouvez aussi simplement remplacer 'string:' avec '')
  4. [0-9]un caractère entre 0 et 9 (par exemple, un chiffre)
  5. + doit avoir au moins un « de ces » (à savoir, les chiffres ci-dessus), mais peut avoir un nombre quelconque
  6. $ fin de la chaîne
+0

+1 mais les parens et le + pourraient être plus que nécessaire, en fonction de ce que l'OP veut exactement - je lui expliquerais la signification. – annakata

+0

@VoteyDisciple: - var temp = "sélectionnez * de' Demo' AS 'D1',' Demo2' AS 'D2'"; Je veux sélectionner le texte après 'AS' je.e D1 et D2 utilisant une expression régulière. – Sanjiv

+0

@Sanjiv Ce n'est pas lié à cette question. Pour poser une nouvelle question, vous voulez le bouton "Poser une question" en haut de la page. – VoteyDisciple

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

Ce qui précède est bon pour les nombres entiers; si vous voulez nombres à virgule flottante, ou même notation scientifique (comme compris dans les langues de type C), vous voulez quelque chose comme ceci:

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

Vous pouvez supprimer le premier [+ -]? si vous ne vous souciez pas du signe, le (. [0-9] +)? si vous ne vous souciez pas des points flottants, et ([eE] [+ -]? [0-9] +)? si vous ne vous souciez pas des exposants de notation scientifique. Mais s'il y a une chance que vous vouliez faire correspondre ceux-ci, vous voulez les inclure en option dans l'expression rationnelle.

+0

Ma réponse ne force pas la chaîne pour correspondre aux règles complètes de la notation scientifique, ce qui entraîne exactement un chiffre à gauche de la virgule décimale. Si vous voulez cela, vous voulez quelque chose comme ([+ -]? [0-9] + (\. [0-9] +)? | [+ -]? [0-9] (\. [0-9] +)? ([EE] [+ -]? [0-9] +)?) La première partie, à gauche du "|" caractère, nécessite un signe optionnel, 1+ chiffres, et éventuellement un nombre décimal w/plusieurs chiffres. La deuxième partie requiert un numéro de notation scientifique valide, comprenant seulement un chiffre à gauche de la décimale. Vous pouvez changer le "+" après les chiffres au point décimal en "*" si vous voulez autoriser des nombres comme "5". ainsi que. –

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

numéro est un nombre entier dans l'exemple ci-dessus.

+1

Pourquoi mettre cette double négation au début? – VoteyDisciple

+0

Pour essayer de contraindre un booléen. Il vaut mieux utiliser .test() ici –

3

Si vous voulez seulement vérifier si la chaîne d'entrée correspond au modèle, vous pouvez utiliser la fonction RegExp.test:

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

ou avec la fonction String.search:

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

Si vous souhaitez valider et obtenez le nombre:

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

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