2016-07-14 3 views
-2

Ich habe eine Zeichenfolge wie untenIch kann nicht Matchstring mit regex in NodeJS

let value : '<ns2:NewsPaper unitid="112345"> 
     <idType>DG</idType> 
     </ns2:NewsPaper>' 

Ich brauche Inhalt <ns2:NewsPaper. bekomme ich ein Stück Code schreiben. Aber es gibt null zurück. Hier ist mein Code:

let abc = /NewsPaper>(\*)</.exec(value); 
     console.log(abc); 

Es gibt null zurück. Warum ?

+2

Warum versuchen Sie '' 'nach' NewsPaper' zu finden, wenn die Eingabezeichenfolge kein '>' hat? Die Zeichenkette hat kein '*', warum benutzt man '\ *' dann im Muster? Benutze '/ NewsPaper \ b [^ <] * \ bunitid =" ([^ "] +)"/'und benutze' .exec (value) [1] '. –

+0

Das ist ein Nitpick, aber du solltest es nicht brauchen "var" und "lass" so zu verwenden. Ich nehme an, dass du sie austauschbar verwendest. Ich würde bewusster mit meinem Gebrauch von 'var',' let' und 'const' umgehen. Ehrlich gesagt, wenn du es bist Wenn Sie eine Version von 'node' verwenden, die ES6 unterstützt, sollten Sie einfach' let' und 'const' verwenden und vermeiden,' var' zu verwenden. – wpcarro

+0

Auch 'var value =" ";' ist nicht gültig JS.Sie müssen die internen Doppel-Anführungszeichen wie diese "\" 'oder die Umschreibung in einfachen Anführungszeichen wie diese" var value = ' wpcarro

Antwort

0

Ein einfacher Weg wird passend sein:

let rex = /unitid=\"\d*\"/g; 
let abc = rex.exec(value); // ["unitid="112234"", "unitid="112234""] 
+0

Ich möchte den Inhalt von newPaper – userh

0

Diese Regex sollte arbeiten, was Sie kratzen:

unitid="[^"]+" 

Es unitid=" buchstäblich übereinstimmen, Zeichen für Zeichen. Dann wird es [^"]

Wie für die JS wie folgt überein:

const value = '<ns2:NewsPaper unitid="112234">'; 
const regex = /unitid="[^"]+?"/; 
const matches = value.match(regex); 

console.log(matches); 
// => ["unitid=\"112234\""] 

Beachten Sie, wie die Erfassung Pars sind nicht erforderlich. Dies liegt an der Implementierung der match(..)-Funktion von JS. Die Ausgabe, wenn Sie die Erfassung Pars umfassen wird:

["unitid=\"112234\"", "unitid=\"112234\""] 

Sie sollten das gleiche Verhalten erwarten, selbst wenn Sie die exec(..) Funktion. In bestimmten Fällen wie diesen kann das Weglassen der gefangenen Parens wünschenswert sein. Das erste Element des Arrays matches ist, was auch immer Ihre Regex konsumiert; Alles, was diesem ersten Element folgt, sind die Elemente, die deine Regex erfasst hat.

Here's a link to the JSBin.

+0

Ich möchte newsPaper Inhalt. Wie ? – userh

+0

Ich denke, das sollte in der ursprünglichen Frage klarer gewesen sein. – wpcarro

+0

Ich bearbeite jetzt. Ich kann nicht auf newsPaper-Inhalte zugreifen. – userh