2009-05-11 2 views
4

Для примера, я пытаюсь заменитьПопытка заменить HTML-теги, используя регулярные выражения

<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 

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

ответ

10

У вас есть кронштейны для открытия и закрытия бирки. Так что попробуйте следующее:

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

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

<script

часть с

<div

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

</script>

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

</div>