Я уверен, что это регулярное выражение не работает для закрытия тегов, и только поиск i-z не улавливает полный тег.
Попробуйте регулярное выражение:
/<\(/?[a-z]+)[^>]*>/gi
что-то странное происходит с кодом, хотя при попытке вернуть «< сценарий >» при согласовании сценария и в таких случаях может быть return match
голова Энди Э-х предложение об изменении структуры заявления if, я думаю, тоже помогает, главное -
else
return match;
или даже сделать это по умолчанию вместо того, чтобы специально искать теги p и script, он вернет значение соответствия совпадающего тега, если инструкция if if не выполняется.
Код я написал для тестирования:
<!DOCTYPE HTML>
<html>
<body>
<div id="manipulate">
<p>Hello</p>
<script type="text/ecmascript">
// test
</script>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/ecmascript"></script>
<script type="text/ecmascript">
$(document).ready(function(){
alert("start");
$("#manipulate").html($("#manipulate").html().replace(/<\/?([a-z]+)[^>]*>/gi, function(match, tag) {
alert(tag);
alert(match);
if (tag === 'p')
return '<p>';
else if (tag === '/p')
return '</p>';
else if (tag === 'script')
return match;
else if (tag === '/script')
return match;
else
return match;
}));
});
</script>
</body>
</html>
кажется плохой идеей, чтобы манипулировать HTML с регулярным выражением, как это ... – jAndy
Просто побежал код, направил его обратно к себе, чтобы ссылаться на $ («тело») не это". поднял предупреждение для тега и соответствия. Я получаю тег для/p, который isnt/p для/p, он выходит как «p». и тег для скрипта выходил как «s» У меня что-то не так? –