5

例如,我正在尝试替换

<script type='text/javascript'>some stuff</script>

和:

<div type='text/javascript'>some stuff</div>

我目前正在测试:

alert( o.replace( /(?:<\s*\/?\s*)(script)(?:\s*([^>]*)?\s*>)/gi ,'div') );

但我得到的是:

divsomestuffdiv

我怎样才能让它只替换“脚本”部分并保留其他标记和属性字符?

4

3 回答 3

11

您保留了开始和结束标签括号。所以试试这个:

o.replace(/(<\s*\/?\s*)script(\s*([^>]*)?\s*>)/gi ,'$1div$2')
于 2009-05-11T20:41:34.940 回答
2

DOM 方法比正则表达式更适合这种情况。这样你就可以逻辑地操作你的文档,而不是纯文本:

var els = document.getElementsByTagName('script');
for (var i = 0, el; el = els[i]; i++) {
    var new = document.createElement('div');
    new.type = el.type;
    el.parentNode.replaceChild(el, new);
}
于 2009-05-11T20:42:54.050 回答
2

一种天真的但可读的方法是在我想的两遍中完成,第一次匹配并替换

<script

<div

然后另一个匹配

</script>

并将其替换为

</div>

于 2009-05-11T20:43:48.197 回答