2016-04-14 8 views
1

Ich war nur für einen regulären Ausdruck suchen, der die letzte numerische sehen würde (\ d oder [0-9]) in einer bestimmten Zeichenkette, Zeichenfolgen wie:Warum stimmt die Regex nicht am Ende des Strings mit allen Zahlen überein?

var str = "7-Dec-1985" 
var str = "#scrollto-section-4" 

Of-Kurs fand ich eine Antwort auf die folgende Gewinde auf SO HERE

ich einen regulären Ausdruck verwende wie folgt aus:

str.match(/\d+$/) 

funktioniert gut, keine Probleme, jetzt habe ich das folgende Tool die Regex Analyse HERE,

\d+ //matches greedy 0 to as many 
$ - specifies that the search should start at the end of the string 

Aber warum tut der oben regex im folgende Beispiel:

var str = "7-Dec-1985" 

Spiel nur 1985 warum nicht 71985?

+2

Weil es andere Zeichen zwischen '7' und' 1' gibt, die nicht mit '\ d' übereinstimmen. –

+0

@SebastianProske ja, ich vermute, das war die Antwort, Danke! –

Antwort

2

Da $ bedeutet „Ende der Eingabe“ (oder „Zeilenende oder Ende der Eingabe“, wenn Sie die m Flags angeben) und \d+ bedeuten eine zusammenhängenden Reihe von Ziffern (nicht Ziffern gemischt mit anderen Dingen). Also \d+$ bedeutet "eine zusammenhängende Reihe von Ziffern direkt vor dem Ende."

Wenn Sie irgendwo übereinstimmen möchten, entfernen Sie die $. Wenn Sie mehr als einmal übereinstimmen möchten, benötigen Sie darüber hinaus ein Flag g ("global").

Beispiele - Ihr original:

var str = "7-Dec-1985"; 
 
document.body.innerHTML = JSON.stringify(str.match(/\d+$/));

Ohne die $, aber keine g:

var str = "7-Dec-1985"; 
 
document.body.innerHTML = JSON.stringify(str.match(/\d+/));

Ohne die $ und mit g:

var str = "7-Dec-1985"; 
 
document.body.innerHTML = JSON.stringify(str.match(/\d+/g));

+0

und um die Zahlen alle zusammen zu bekommen, könnten Sie 'str.match (/ \ d +/g) .join ('')' –

+0

@TJ Danke, mein Herr! Fantastische Antwort! :) –

+0

Große Antwort ... Aber schau, du hast 400k rep .. Also lassen Sie uns diese Art von Fragen beantworten * (einfach) * und Sie können harte Fragen beantworten ';-)' – Shafizadeh

2

Sorry, aber $ Mitteln suchen nicht am Ende der Zeichenfolge beginnen.

Ihre Regex \d+$ bedeutet passen Sie die Nummer am Ende der Zeichenfolge.

Um eine beliebige Nummer zu verwenden, verwenden Sie \d+like this.

3

Da gibt es -Dec- zwischen 7 und 1985, die keine Ziffer ist. Auch $ bedeutet Ende der Zeile.Ihr Muster stimmt also genau mit der Nummer überein, die das Ende der Zeichenfolge (kontinuierlich) ist.

Verwandte Themen