使用正则表达式在img标记的末尾插入/

时间:2013-12-21 23:09:11

标签: javascript html regex

我想在字符串中找到的每个img标记的右括号前插入一个结束斜杠。

这(从here修改)正确返回img的每个实例的位置:

var re = /img\s/g,
    match;
    while (match = re.exec(str)) {
      console.log(match.index); //
    }

知道这一点,我怎样才能找到下一个>在每个img之后插入一个/之前?

3 个答案:

答案 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>

演示:http://jsfiddle.net/eZu9U/