2017-09-14 41 views
-3

想使用正則表達式來操縱以下字符串正則表達式替換管道分隔陣列的HTML

hello.jpg|world.jpg 

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

任何指針?

+2

正則表達式用什麼語言? JavaScript的? –

+0

我加了javascript標籤,請批准編輯。 – bhansa

回答

1

假設你所要的輸出是HTML的字符串,而不是實際的DOM節點上,您已經有了一個正則表達式或使用split之間做出選擇:

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);

注這些示例都沒有HTML編碼圖像名稱。如果這是一個問題,你不能使用RegExp方法,但另外兩個可以很容易地進行調整。

如果您想創建實際的DOM節點,那麼使用上述方法之一來生成一個字符串,然後設置您的<ul>innerHTML可能是最容易的。如果你想繞過了中間商,直接進入到DOM,你可以嘗試這樣的事:

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>

通過使用innerText的HTML編碼已佔到。

1

雖然你想使用正則表達式,你也可以使用split()

split()功能發生在一個特定的字符要分割一個字符串,並將其存儲陣列。然後,您可以使用該數組中的每個項目執行以下操作...在這種情況下,我將每個項目都附加到一個新變量中,並將其插入到div中。

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

這有效,當你有兩個元素,但他們可以不止於此。保持動態。 – bhansa

+0

是的,OP只給了兩個元素並指定給定的字符串。你可以用一個簡單的循環來解決這個問題。 – ProEvilz

2

split輸入,並把它添加到您的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

即使它使用拆分而不是被要求的正則表達式,這是迄今爲止發佈的最佳解決方案 –

+0

謝謝@DarrenH,如果您願意,隨時添加。 – bhansa

+1

實際上,我覺得split是比這個特殊情況下的正則表達式更好的選擇,正則表達式只是使其不必要地複雜化。儘可能保持簡單! –

1

簡單的一切,但管匹配(|

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

然後做任何你想要的匹配項目,比如將它們添加到DOM。

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); 
}