web-dev-qa-db-fra.com

Correspondance d'expression régulière Javascript sur une chaîne suivie d'un nombre?

J'ai une chaîne du format: string:num où num est un nombre quelconque, mais string est une chaîne connue sur laquelle je dois faire correspondre. J'aimerais avoir ceci dans une déclaration if comme:

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

Tu veux ...

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

Ceci comprend:

  1. ^ début de la chaîne
  2. string: le littéral "chaîne:" que vous avez mentionné
  3. (.....) Cette sous-expression, à laquelle vous pourrez vous référer ultérieurement si vous avez besoin de savoir quel nombre est dans la chaîne (même si dans ce cas particulier, vous pouvez simplement remplacer 'string:' par '')
  4. [0-9] a caractère entre 0 et 9 (c'est-à-dire un chiffre)
  5. + Doit avoir au moins un "de ceux" (c'est-à-dire les chiffres mentionnés ci-dessus), mais peut avoir n'importe quel nombre
  6. $ fin de la chaîne
43
VoteyDisciple
if( it.match(/^string:\d+$/) ( {
   ...
}
5
Alex Martelli

Si vous souhaitez uniquement 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 voulez valider et obtenir le numéro:

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

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

Ce qui précède convient aux nombres entiers. si vous voulez des nombres à virgule flottante, ou même une notation scientifique (telle que comprise dans les langages de type C), vous voudrez 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 du ([eE] [+ -]? [0-9] +)? si vous ne vous souciez pas des exposants de notation scientifique. Mais s'il y a une chance que vous souhaitiez faire correspondre celles-ci, vous voulez les inclure comme facultatif dans la regex.

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

Le nombre est un entier dans l'exemple ci-dessus.

0
fphilipe