2017-06-17 4 views
2

Ich habe eine Zeichenfolge Text, die bestimmte Tags enthalten können. Beispiel: var string = '<pause 4>This is a line of text.</pause><pause 7>This is the next part of the text.</pause>';Javascript Regex übereinstimmen und Werte von String

Was ich versuche, ist ein Regex-Match gegen die <pause #></pause> Tag. Für jede gefundene Tags, in diesem Fall ist es <pause 4></pause> und <pause 7></pause>. Was ich will, ist den Wert 4 und 7 zu nehmen, und die String-Länge geteilt durch für die Zeichenfolge zwischen den <pause #>...</pause> Tags.

Was ich für jetzt habe ist nicht viel. Aber ich kann nicht herausfinden, wie man alle Fälle ergreift, dann durch jede Schleife und ergreife die Werte, nach denen ich suche.

für diese Meine Funktion wie folgt aussieht jetzt, es ist nicht viel:

/** 
* checkTags(string) 
* Just check for tags, and add them 
* to the proper arrays for drawing later on 
* @return string 
*/ 
function checkTags(string) { 

    // Regular expresions we will use 
    var regex = { 
     pause: /<pause (.*?)>(.*?)<\/pause>/g 
    } 

    var matchedPauses = string.match(regex.pause); 

    // For each match 
     // Grab the pause seconds <pause SECONDS> 
     // Grab the length of the string divided by 2 "string.length/2" between the <pause></pause> tags 
     // Push the values to "pauses" [seconds, string.length/2] 

    // Remove the tags from the original string variable 

    return string; 


} 

Wenn jemand erklären kann, meine, wie ich dies tun könnte, wäre ich sehr dankbar! :)

Antwort

1

match(/.../g) speichert keine Untergruppen, Sie werden exec oder replace benötigen, um das zu tun. Hier ist ein Beispiel für eine replace -basierte Helferfunktion für alle Spiele zu erhalten:

function matchAll(re, str) { 
 
    var matches = []; 
 
    str.replace(re, function() { 
 
    matches.push([...arguments]); 
 
    }); 
 
    return matches; 
 
} 
 

 
var string = '<pause 4>This is a line of text.</pause><pause 7>This is the next part of the text.</pause>'; 
 

 
var re = /<pause (\d+)>(.+?)<\/pause>/g; 
 

 
console.log(matchAll(re, string))

Da du-Tags zu entfernen sowieso, auch replace direkt nutzen können.

0

Als Startpunkt, da Sie nicht viel haben, so weit Sie versuchen diese könnten

/<pause [0-9]+>.*<\/pause>/g 

als die Anzahl zu bekommen da draußen, um Ihr Ergebnis wieder

mit
/[0-9]+>/g 

Um von der loszuwerden Letztes Zeichen>

str = str.slice(0, -1); 
1

Sie müssen eine Schleife erstellen, um alle übereinstimmenden Gruppen Ihres RegExp-Musters im Text zu finden. Die übereinstimmende Gruppe ist ein Array, das den ursprünglichen Text, den übereinstimmenden Wert und den Übereinstimmungstext enthält.

var str = '<pause 4>This is a line of text.</pause><pause 7>This is the next part of the text.</pause>'; 
 

 

 
function checkTags(str) { 
 

 
    // Regular expresions we will use 
 
    var regex = { 
 
     pause: /<pause (.*?)>(.*?)\<\/pause>/g 
 
    } 
 
    var matches = []; 
 
    while(matchedPauses = regex.pause.exec(str)) { 
 
     matches.push([matchedPauses[1], matchedPauses[2].length /2]); 
 
    }; 
 

 
    return matches; 
 

 
} 
 

 
console.log(checkTags(str));

Verwandte Themen