用。替换节点之间的空间

时间:2017-06-15 06:28:52

标签: javascript regex

我有像

这样的字符串
Male <input type="checkbox" value="male" name="gender[]" >
Female <input type="checkbox" value="Female" name="gender[]">

输出应该像

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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

有人指出,你不应该使用正则表达式来解析html,它一般来说太复杂了(Here讨论得很好。)

此外,您缺少最后一个div的结束标记,它应该是:

...</div></html>

最后,如果您仍想使用正则表达式,可以尝试查找'&gt; \ s +&lt;'并替换为'&gt;&amp; npsp&lt;'替换不同标签之间的空格。

替换标签内的空格要困难得多,我认为你真的应该避免它。

答案 2 :(得分: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(''));