Попытка заменить HTML теги с помощью regex

Например, я пытаюсь заменить

<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

Как я могу получить это только заменить "сценарий" часть и сохранить другие разметки и атрибут символов?

Ответ на: "Попытка заменить HTML теги с помощью regex"

Количество ответов:3

У вас есть держать открытия и закрытия тегов скобки. Так что попробуйте это:

o.replace(/(<\s*\/?\s*)script(\s*([^>]*)?\s*>)/gi ,'$1div$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);
}

Наивный, но читаемый способ будет сделать это в два прохода я полагаю, и первый матч и заменить

<script

часть с

<div

, а затем другой, который будет соответствовать

</script>

и заменить его на

</div>