2016-04-25 16 views
-1

Ich möchte mehrere Variablen aus einer Zeichenfolge mit Javascript erhalten.Mehrere Regex aus einer Zeichenfolge filtern Javascript

String Beispiel:

<span var1="abc" some random thing var2="cde" another random stuff var3="efg"></span> 
<span var1="abc" some random thing var2="cde" another random stuff??> 
<::" var3="efg"></span> 

I var1, var2 und var3 erhalten möchten.

Das nächste, was ich mit diesem Regex nur für die erste Gruppe bekommen kann. Hier

span var1="(.*?)"(?:.*)var2="(.*?)"(?:.*)var3="(.*?)"(?:.*)\/span 

ist das Beispiel: Example

Thank you!

+0

Wenn ich klar verstanden, was Sie wollen, Sie versuchen, regex über HTML zu benutzen? Bitte lesen [dieses Thema] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags). – FredMaggiowski

Antwort

0

BEARBEITEN Bitte siehe REGEX 101 DEMO. Sie könnten versuchen:

function getVars(str) { 
 
    var reg = /var1="(.*?)".*?\n*.*?var2="(.*?)".*?\n*.*?var3="(.*?)"/g; 
 
    while (found = reg.exec(str)) { 
 
    document.write ("var1 = " + found[1] + "<br>var2 = " + found[2] + "<br>var3 = " + found[3] + "<br>"); 
 
    } 
 
} 
 

 
var str = '<span var1="abc" some random thing var2="cde" another random stuff var3="efg"></span>\n' + 
 
'<span var1="abc" some random thing var2="cde" another random stuff??>\n' + 
 
'<::" var3="efg"></span>'; 
 
getVars(str);

+0

Das was ich brauche. Vielen Dank –

0

Fehle ich etwas? Dein Code funktioniert für mich.

Siehe nachstehendes Beispiel:

var str = '<span var1="abc" some random thing var2="cde" another random stuf var3="efg"></span><span var1="abc" some random thing var2="cde" another random stuf??><::" var3="efg"></span>'; 
 

 
var re = /<span var1=["'](.*?)["'](?:.*)var2=["'](.*?)["'](?:.*)var3=["'](.*?)["'](?:.*)\/span>/; 
 

 
var matches = re.exec(str).slice(1); 
 

 
matches.forEach(function(match) { 
 
    document.body.insertAdjacentHTML('beforeend', match + '<br>'); 
 
});

0

Was Sie brauchen, ist die exec Methode der Regex. Sie können wiederholt Submatches erhalten, die nach dem letzten Match an der Position bleiben.

Was ich tat:

  • benutzte ich regex.exec statt string.match
  • ich g hinzugefügt, um die regex globale
  • ich (?:.*)-.*? geändert zu machen, weil es zu gierig sein würde und essen alle Inhalte in der Mitte

Jetzt funktioniert es (jQuery nur für die einfache Visualisierung der aus Put):

var str = '<span var1="abc" some random thing var2="cde" another random stuf var3="efg"></span><span var1="abc" some random thing var2="cde" another random stuf??><::" var3="efg"></span>'; 
 

 
// Note that I added "g" to make it a global selector and changed all (?:.*) to .*? 
 
var re = /<span var1="(.*?)".*?var2="(.*?)".*?var3="(.*?)".*?\/span>/g; 
 

 
var matches; 
 
// You can call re.exec repeatedly and it will return always the next group of results 
 
while(matches = re.exec(str)) { 
 
    // matches will look like this: ["<span var1="abc" some random thing var2="cde" another random stuf var3="efg"></span>", "abc", "cde", "efg", index: 0, input: "<span var1="abc" some random thing var2="cde" anot…de" another random stuf??><::" var3="efg"></span>"] 
 

 
    // This is just for nice output 
 
    $("<span/>").text(matches[0]).appendTo("body"); 
 
    $("<ul/>").append(matches.slice(1).map(function(m) { 
 
     return $("<li/>").text(m); 
 
    })).appendTo("body"); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Wenn Sie ein bisschen weniger „steif“ sein wollen und suchen gerade nach etwas, was wie ein HTML-Attribut sieht mit Zitaten, können Sie diese Regex verwenden statt: /\s([\w-]+)="(.*?)"/g.

Verwandte Themen