與 

2017-06-15 93 views
-2

我有串狀與 

var data="<html> <div style=""> fasf saf <div></html>" 

輸出應該像

var data="<html>&npsp<div style"">&nbsp;fasf&nbsp;saf&nbsp;<div></html>" 
+0

建議:不要使用正則表達式來處理HTML文本,因爲HTML文本太複雜,正則表達式無法正確處理。 – Andreas

回答

0

正如有人指出的那樣,你不應該使用正則表達式解析HTML代替節點之間的空間,它一般來說太複雜(Here有一個很好的討論)。

而且,你缺少你的最後一個div結束標籤,它應該是:

...</div></html> 

最後,如果你仍想使用正則表達式,你可以嘗試尋找「> \ S + <」和替換爲'> & npsp <'替換不同標籤之間的空格。

更換標籤內的空間要困難得多,我想你真的應該避免它。

0

因爲你在標籤中有空間,所以不能簡單地替換。試試看:

var data="<html> <div style=''> fasf saf <div></html>"; 
 
var strs = data.split(''); 
 
var openTag = false; 
 
for(var i = 0; i< data.length; i++){ 
 
    if(strs[i]=="<") 
 
    openTag = true; 
 
    if(strs[i]==">") 
 
    openTag = false; 
 
    if(!openTag && strs[i] == " ") 
 
    strs[i] = "&nbsp;" 
 
} 
 
console.log(strs.join(''));

1

嘗試使用DOM。

//create a dummy div. 
var elem = document.createElement("div"); 
//now append the text as child. 
elem.innerHTML = data; 
//now get the string that needs the edit. 
//if you have multiple divs iterate through the elements and do the following. 
var temp = elem.getElementsByTagName("div")[0].innerHTML; 
temp = temp.replace(new RegExp(" ","g"),"&nbsp"); 
//finally update the div and get back edited data. 
elem.getElementsByTagName("div")[0].innerHTML = temp; 
data = elem.innerHTML;