2009-01-15 5 views
28

Comment puis-je tester si un RegEx correspond à une chaîne exactement?Chaîne exacte avec JavaScript

var r = /a/; 
r.test("a"); // returns true 
r.test("ba"); // returns true 
testExact(r, "ba"); // should return false 
testExact(r, "a"); // should return true 
+0

Avez-vous eu l'intention d'écrire "var r = /./;"? – Prestaul

+0

J'avais l'intention d'écrire/a/(: merci –

+0

Possible copie de [Regex - Match chaîne entière] (http://stackoverflow.com/questions/6298566/regex-match-whole-string) – Vadzim

Répondre

59

soit

var r = /^a$/ 

ou

function matchExact(r, str) { 
    var match = str.match(r); 
    return match != null && str == match[0]; 
} 
+4

Cette réponse est incorrecte. Le triple est égal à la comparaison de type et à la comparaison de valeurs Comme str.match renvoie un tableau de résultats, le type de retour de str.match est Array, mais le type de str est String. jetez un coup d'oeil au premier élément du tableau des résultats.Vérifiez ce jsfiddle: http://jsfiddle.net/m2HFP/ –

+0

@SteveMelvin merci pour le crochet – Jimmy

+0

Voir aussi la réponse de svante ci-dessous, car il donne une explication quant à pourquoi cela fonctionne – WhyNotHugo

12

Écrivez votre regex différemment:

var r = /^a$/; 
r.test('a'); // true 
r.test('ba'); // false 
8

Si vous n'utilisez pas des espaces réservés (comme "exactement" semble imply), que diriez-vous de la comparaison de chaîne instea ré?

Si vous utilisez des espaces réservés, ^ et $ correspondent respectivement au début et à la fin d'une chaîne.

0
var data = {"values": [ 
    {"name":0,"value":0.12791263050161572}, 
    {"name":1,"value":0.13158780927382124} 
]}; 

//JSON to string conversion 
var a = JSON.stringify(data); 
// replace all name with "x"- global matching 
var t = a.replace(/name/g,"x"); 
// replace exactly the value rather than all values 
var d = t.replace(/"value"/g, '"y"'); 
// String to JSON conversion 
var data = JSON.parse(d); 
Questions connexes