2010-07-20 6 views
55

Est-il possible en JavaScript de faire quelque chose comme preg_match fait en PHP?preg_match en JavaScript?

Je voudrais être en mesure d'obtenir deux numéros de chaîne:

var text = 'price[5][68]'; 

en deux variables séparées:

var productId = 5; 
var shopId = 68; 

Edit: J'utilise aussi MooTools si cela peut aider.

Répondre

85

JavaScript a un objet RegExp qui fait ce que vous voulez. L'objet String a une fonction match() qui vous aidera.

var matches = text.match(/price\[(\d+)\]\[(\d+)\]/); 
+26

Pour les autres googleurs; 'text.match' renverra le résultat de la correspondance. donc 'var match = text.match (/ prix \ [(\ d +) \] \ [(\ d +) \] /)' et ensuite 'alert (match [1]);' – Maurice

26
var text = 'price[5][68]'; 
var regex = /price\[(\d+)\]\[(\d+)\]/gi; 
match = regex.exec(text); 

La correspondance [1] et la correspondance [2] contiendront les chiffres que vous recherchez.

5

Cela devrait fonctionner:

var matches = text.match(/\[(\d+)\][(\d+)\]/); 
var productId = matches[1]; 
var shopId = matches[2]; 
4
var myregexp = /\[(\d+)\]\[(\d+)\]/; 
var match = myregexp.exec(text); 
if (match != null) { 
    var productId = match[1]; 
    var shopId = match[2]; 
} else { 
    // no match 
} 
13
var thisRegex = new RegExp('\[(\d+)\]\[(\d+)\]'); 

if(!thisRegex.test(text)){ 
    alert('fail'); 
} 

J'ai trouvé test pour agir plus preg_match car il fournit un retour booléenne. Cependant, vous devez déclarer un var RegExp. ASTUCE: RegExp ajoute son propre/au début et à la fin, donc ne les transmettez pas.

+6

Vous pouvez aussi raccourcir cela avec '/\ [(\ d +) \] \ [(\ d +) \] /. test (texte) ' – FlabbyRabbit

+0

Je suis d'accord, car je cherchais comment reproduire la fonction de test de regex de preg_match quand j'ai vu le titre de cette question ;) – flu

+0

L'utilisation du constructeur de classe RegExp a l'avantage que si vous avez besoin d'interpoler une variable dans le motif, cela prend une chaîne! –