2010-08-08 5 views
1

J'ai besoin d'extraire le numéro de la chaîne simple suivante:Comment extraire un nombre de cette simple chaîne en utilisant RegExp en JavaScript?

base:873 

où la « base: » partie est facultative, à savoir, il peut/ne peut pas exister dans la chaîne.

Comment suis-je supposé extraire le nombre de la chaîne ci-dessus en utilisant RegExp?

P.S .: C'est dommage de voir une si grande différence entre les autres implémentations d'expressions régulières et celles de JavaScript.

TIA, Mehdi

Update1:

Considérez cette boucle:

for (var i = 0; i < 3; i++) { 
    code = '216'; 

    var matches = /(bid:)?(\d+)/ig.exec(code); 
    if (matches != null) { 
     console.log('>>>' + matches[0]); 
    } 
    else { 
     console.log('>>> no match'); 
    } 
} 

S'il vous plaît noter que la variable "code" est situé dans la boucle, et à seulement à des fins de test. Cependant, la chose étonnante est que les impressions de code mentionnées ci-dessus ceci:

>>>216 
>>> no match 
>>>216 

Comment cela pourrait être possible ???

Répondre

3

Eh bien, si le base: est optionnel, vous n'avez pas besoin de vous en soucier, n'est-ce pas?

\d+ 

est tout ce dont vous avez besoin.

result = subject.match(/\d+/); 

retournera le (premier) numéro dans la chaîne subject. Ou vouliez-vous dire: Correspond au numéro seulement s'il s'agit de la seule chose dans la chaîne, ou si elle est précédée par base:?

Dans ce cas, utilisez ^(?:base:)?(\d+)$.

var match = /^(?:base:)?(\d+)$/.exec(subject); 
if (match != null) { 
    result = match[1]; 
} 
+0

Vous n'avez même pas besoin du groupe de capture, par ex. ''base: 873'match (/ \ d + /) [0];' :) – CMS

+0

Droit! Faisons cela encore plus simple! Merci :) –

+0

Eh bien, merci. Cependant, j'ai mis à jour la question. Pourriez-vous considérer la mise à jour? – Mehdi

0

Essayez (base:)?(\d+)

Le numéro sera dans la seconde variable de capture.

Alternativement, remplacer "base:" par rien.

Ou diviser le ':'.

Ou quoi que ce soit.

Questions connexes