2017-09-14 1 views
-3

Am versuchen regex verwenden Sie die folgende ZeichenfolgeRegex zu ersetzen Rohr begrenzt Array HTML

hello.jpg|world.jpg 

zu

<li>http://example.com/hello.jpg</li> 
<li>http://example.com/world.jpg</li> 

Alle Hinweise zu manipulieren?

+2

Regex in welcher Sprache? Javascript? –

+0

Ich habe das Javascript-Tag hinzugefügt, bitte bestätigen Sie die Änderung. – bhansa

Antwort

1

Angenommen, Sie möchten die Ausgabe eine Reihe von HTML zu sein, anstatt tatsächliche DOM-Knoten Sie die Wahl zwischen einem RegExp oder mit split haben:

var str = 'hello.jpg|world.jpg|globe.jpg'; 
 

 
// Using RegExp 
 
var str1 = str.replace(/([^|]+)\|?/g, '<li>http://example.com/$1</li>'); 
 

 
// Using split/map/join with ES6 
 
var str2 = str.split('|').map(img => `<li>http://example.com/${img}</li>`).join(''); 
 

 
// Using split/map/join old school 
 
var str3 = str.split('|').map(function(img) { 
 
    return '<li>http://example.com/' + img + '</li>'; 
 
}).join(''); 
 

 
console.log(str1); 
 
console.log(str2); 
 
console.log(str3);

Hinweis dass keines dieser Beispiele HTML den Bildnamen codiert. Wenn das ein Problem ist, können Sie den RegExp-Ansatz nicht verwenden, aber die anderen beiden könnten leicht angepasst werden.

Wenn Sie die tatsächlichen DOM-Knoten erstellen wollten, dann ist es am einfachsten, einen der obigen Ansätze zu verwenden, um eine Zeichenfolge zu generieren, und dann einfach innerHTML von <ul>. Wenn Sie den Mittels auszuschneiden und gehen Sie direkt zum DOM wollte könnten Sie so etwas wie dies versuchen:

var ul = document.getElementById('list'); 
 

 
var str = 'hello.jpg|world.jpg|globe.jpg'; 
 

 
str.split('|').forEach(function(img) { 
 
    var li = document.createElement('li'); 
 
    
 
    li.innerText = 'http://example.com/' + img; 
 
    
 
    ul.appendChild(li); 
 
});
<ul id="list"></ul>

Durch die Verwendung von innerText die HTML-Codierung für wurde berücksichtigt.

1

Während Sie regex verwenden wollten, können Sie auch split()

Die split() Funktion nimmt in einem bestimmten Zeichen verwenden Sie einen String durch und speichert sie als Array aufzuteilen. Sie können dann jedes Element in diesem Array verwenden, um was auch immer mit ... zu tun. In diesem Fall habe ich jedes in eine neue Variable angehängt und es in eine div eingefügt.

var str = "hello.jpg|world.jpg"; 
 
    var res = str.split("|"); 
 
    var html = "<li>http://example.com/"+res[0]+"</li><li>http://example.com/"+res[1]+"</li>"; 
 
    
 
    document.getElementById("foo").innerHTML = html;
<div id="foo"></div>

+0

Dies funktioniert, wenn Sie zwei Elemente haben, aber sie können mehr als das sein. behalte es dynamisch. – bhansa

+0

Ja, OP gab nur zwei Elemente und spezifizierte die angegebene Zeichenfolge. Sie können dies einfach in eine einfache Schleife einfügen, um das Problem zu lösen. – ProEvilz

2

split Ihre Eingabe und fügen Sie ihn in Ihre HTML-DOM

<ul id="list"> 
 

 
</ul> 
 

 
<script> 
 
    var html = "hello.jpg|world.jpg".split("|"); 
 
    for (var vl in html) { 
 
    
 
    var li = document.createElement("li"); 
 
    
 
    li.innerHTML = "http://example.com/" + html[vl]; 
 
    
 
    document.getElementById("list").appendChild(li); 
 
    
 
    } 
 
</script>

+0

Obwohl es Split anstelle von Regex verwendet, die gefragt wurde, ist dies die beste Lösung bisher –

+0

Dank @DarrenH, fühlen Sie sich frei, wenn Sie möchten. – bhansa

+1

Ich glaube, Split ist eine bessere Wahl als Regex für diesen speziellen Fall, Regex verkompliziert es einfach unnötig. Halte es einfach wo du kannst! –

1

einfach das alles passen, aber das Rohr (|)

var myString = 'hello.jpg|world.jpg'; 
var matches = myString.match(/[^|]{1,}/g); 

Dann tun Sie, was Sie wollen, mit den passenden Elementen, wie sie zum DOM hinzufügen.

var container = document.getElementById('container'); 
for(var i = 0; i < matches.length; i++) { 
    var li = document.createElement('li'); 
    li.innerHTML = matches[i]; 
    container.appendChild(li); 
}