2016-07-01 17 views
0

Ich bin nicht wirklich sicher, wie man das unten in Regex, könnten Sie mir helfen?Regex zu Zahlen größer als 0, in Klammern und wenn das zweitletzte Zeichen als Zeichenfolge

Ich entwickle eine Anwendung, die eine Seite kratzen, und als Ergebnis erhalte ich:

["(02335E)", "(02743M)", "(00899G)", "(02657J)", 
"(03330B)", "(03359M)", "(Macquarie)", "(00002J)", 
"(01994M)", "(00401E)", "(Australia)", "(02517K)", 
"(01545C)", "(03245K)", "(00168J)", "(03258E)", 
"(00172B)", "(02318F)", "(02778M)", "(03350J)", 
"(00682B)", "(03265F)", "(from 354 rows)"] 

Wie kann ich in Javascript Regex nur die Zahlen Reibe als Null innerhalb dieser Klammer, wenn die Schnurenden (vor der Klammer) mit einem beliebigen Zeichen (wie E, M, G, J, B, F usw.)?

So zum Beispiel in der Zeichenfolge, (02335E), würde ich 2335, und in der Folge (00682B), erhalte ich 682 bekommen würde.

Vielen Dank für Ihre Hilfe.

+0

Sie wollen eine Reihe von eben diesen Elementen erhalten, aber nur mit den Nicht-Null numerische Komponenten? –

+0

wie dieser Wert '" (00401E) "' wahrgenommen werden sollte, wie '401' oder' 41'? – RomanPerekhrest

+0

Hallo RomanPerekrest, sollte es als 401 wahrgenommen werden, da nur die ersten zwei Nullen nicht gültig sind. –

Antwort

1
"(02335E)".match(/^\(0*([1-9]\d*)[A-Za-z_]*\)$/)[1]; 

Erläuterung:

  • ^: Beginn der Zeichenfolge.
  • \(: Ein Literal links paren.
  • 0*: Null oder mehr Nullen.
  • ([1-9]\d*): Erfassen Sie eine 1-9, gefolgt von null oder mehr Ziffern.
  • [A-Za-z_]*: Null oder mehr Wortzeichen (minus Ziffern).
  • \): Ein wörtliches Recht paren.
  • $: Das Ende der Zeichenfolge.
+0

@JDB, stimmt, danke, dass du das herausgibst. Aktualisiert. – romellem

+0

Haha hatcha. Wurde erneut aktualisiert. Vielen Dank! Kaffee trinkt immer noch heute Morgen. :) – romellem

+0

Vielen Dank romellen, es ist perfekt. Ich versuchte wirklich schwer mit diesem zu kommen, aber ich habe noch viel Regex zu studieren. –

1

können Sie diese Regex versuchen auf jeder Saite:

/^\(0*([1-9][0-9]*)[A-Z]\)$/ 
  • ^: Start von Anfang
  • \(: match ersten Klammern
  • 0*: Spiel Eröffnung 0s
  • [1-9][0-9]*: Übereinstimmung mit Nicht-Null-Nummer (die Antwort)
  • [A-Z]: Spiel Charakter
  • \): match schließen Klammern
  • $: Ende am Ende der Schnur

Die erste Erfassungsgruppe Ihre Antwort.

0

Sie wahrscheinlich nicht alles komplizierter müssen als:

/[1-9][0-9]*/g 

Es 1-9, gefolgt von einer beliebigen Anzahl von Ziffern übereinstimmen in der ganzen Kette. Keine Notwendigkeit für eine Erfassungsgruppe.

https://regex101.com/r/nK0qZ7/3

0

Auch wenn Sie bereits eine Antwort akzeptiert haben, ich will nur diese für Spaß nur hinzufügen, da ich es hat geklappt.

Diese spezielle Lösung gibt Ihnen ein neues Array eines gefilterten Datensatzes zurück. Es werden auch diejenigen herausgefiltert, die nicht mit Zahlen wie "(Macquarie)" übereinstimmen.

var data = ["(02335E)", "(02743M)", "(00899G)", "(02657J)", "(03330B)", "(03359M)", "(Macquarie)", "(00002J)", "(01994M)", "(00401E)", "(Australia)", "(02517K)", "(01545C)", "(03245K)", "(00168J)", "(03258E)", "(00172B)", "(02318F)", "(02778M)", "(03350J)", "(00682B)", "(03265F)"]; 
 

 
var filtered = data.map(function(item) { 
 
    return parseInt(item.replace(/^\((\d+)/, '$1')); 
 
}).filter(num => !isNaN(num)); 
 

 
console.log(filtered);

Verwandte Themen