2009-01-15 12 views
28

Wie kann ich testen, ob eine RegEx eine Zeichenfolge entspricht genau?Passende exakte Zeichenfolge mit 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

Haben Sie vor, "var r = /./;" zu schreiben? – Prestaul

+0

Ich beabsichtigte zu schreiben/a/(: Danke. –

+0

Mögliche Duplikate von [Regex - Match ganze Zeichenfolge] (http://stackoverflow.com/questions/6298566/regex-match-whole-string) – Vadzim

Antwort

59

entweder

var r = /^a$/ 

oder

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

Diese Antwort ist falsch. Das triple equals vergleicht und vergleicht Werte, da str.match ein Array von Resultaten zurückgibt, der Rückgabetyp von str.match ist Array, der Stringtyp ist jedoch String, daher schlägt der Vergleich fehl Werfen Sie einen Blick auf das erste Element des Ergebnis-Array. Überprüfen Sie diese jsfiddle: http://jsfiddle.net/m2HFP/ –

+0

@SteveMelvin danke für den Fang. – Jimmy

+0

Siehe auch Svante Antwort, da es eine Erklärung zu geben Warum das funktioniert – WhyNotHugo

12

Schreiben Sie Ihre regex anders:

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

Wenn Sie keine Platzhalter verwenden (wie die "genau" scheint implizieren), wie wäre es mit String Vergleich instea d? Wenn Sie Platzhalter verwenden, passen ^ und $ den Anfang und das Ende eines Strings an.

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); 
Verwandte Themen