2016-03-25 12 views
-1

Ich bin mit regulären AusdruckRegulärer Ausdruck in Javascript Konsole

einige Kontrollen
<p>Click the button to do a global search for "h.t" in a string.</p> 

<button onclick="myFunction()">Try it</button> 

<p id="demo"></p> 

<script> 
function myFunction() { 
var str = "That's cool!"; 
var patt1 = /(h.t)/; 
var result = str.match(patt1); 
document.getElementById("demo").innerHTML = result; 
} 
</script> 

der Ausgang ist Hut, Hut y nicht Hut nur zu tun?

wenn ändern, um Code zu

var patt1 = /h.t/; 

Das Ergebnis ist in Ordnung. Ich habe in W3schools und regexr.com eingecheckt, habe aber immer noch keine Ahnung davon

Antwort

2

Ihr regulärer Ausdruck enthält eine Fanggruppe, die durch die Klammern gekennzeichnet ist. match gibt ein Array von Ergebnissen zurück, wobei das erste Element die gesamte Übereinstimmung ist und die nachfolgenden Einträge die erfassten Gruppen sind. In diesem Fall ist die Gruppe die gesamte Regex, daher wird hat wiederholt.

Wenn Sie die Erfassungsgruppe entfernen, werden Sie einen Eintrag erhalten:

var str = "That's cool!"; 
var patt1 = /h.t/; 
var result = str.match(patt1); // ["hat"] 

Alternativ kann, wenn wir die Regex etwas zeigen, das Verhalten weiter ausbauen:

var str = "That's cool!"; 
var patt1 = /T(h.t)/; 
var result = str.match(patt1); // ["That", "hat"] 

Wir sehen, dass die das ganze Spiel ist der erste Eintrag, mit der einfangenden Gruppe als nächstes.

+0

vielen Dank. Ich verstehe das Konzept jetzt. so heißt es, wenn var patt1 =/((ht))/ sollte er ["Hut", "Hut", "Hut"] – wingdf1000

+0

@ wingdf1000 Ja, obwohl ich nicht sicher bin, wie viel ein solches verschachteltes Muster verwenden wäre in der Praxis :) –