我想在字符串中找到的每个img
标记的右括号前插入一个结束斜杠。
这(从here修改)正确返回img
的每个实例的位置:
var re = /img\s/g,
match;
while (match = re.exec(str)) {
console.log(match.index); //
}
知道这一点,我怎样才能找到下一个>在每个img
之后插入一个/之前?
答案 0 :(得分:4)
这个怎么样,很简单,但看起来它适合你的情况:
str.replace(/(<img[^>]*)>/g, "$1 />");
如果你想让它变得更聪明,你可以这样做:
str.replace(/(<img[^>]*?) *\/?>/g, "$1 />");
this将考虑到末尾已经有空格和/或斜线的事物......并为以下所有内容创建相同的输出:
IN:
<img src='foo.png'>
<img src='foo.png' >
<img src='foo.png'/>
<img src='foo.png' />
OUT for all the above:
<img src='foo.png' />
如果您想要<img src='foo.png'/>
,只需删除替换中$1
之后的空格。
答案 1 :(得分:2)
尝试这样的事情:
var imgs = "<img blblblb > <img adadasd>"
var pattern = /(<img[^>]*)>/g;
imgs = imgs.replace(pattern, "$1/>");
console.log(imgs);
//<img blblblb /> <img adadasd/>
答案 2 :(得分:1)
如果您有兴趣,我有一个非正则表达式解决方案:
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"/>
<script type="text/javascript">
function close_img_tags(){
var str = document.getElementById("txt").value, len = str.length, i, j;
for(i = 0; i < len-4; i++){
if(str[i]+str[i+1]+str[i+2]+str[i+3] == "<img"){
for(j = i+4; j < len; j++){
if(str[j] == ">"){
if(str[j-1] != "/"){
str = str.substr(0, j)+"/"+str.substr(j);
i = j+2;
}
else{
i = j+1;
}
break;
}
}
}
}
document.getElementById("txt").value = str;
}
</script>
<style type="text/css">
textarea{
width:400px;
height:300px;
}
</style>
</head>
<body>
<textarea id="txt"></textarea><br/>
<button type="button" onclick="close_img_tags();">Edit HTML</button>
</body>
</html>