我想使用js从包含PHP和HTML代码的字符串中重新填充html DOM。
Beam
所需的输出:
var string = "<?php echo Hi Friends ?>
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript" src="js/loader.js" defer></script>
</head>
<body>
<p>Hello</p>
<?php echo Hi Friend ?>
</body>
</html>";
我希望仅呈现html代码。
答案 0 :(得分:1)
这是一种有效的方法:
.split()
在结束符char上将字符串转换为数组:var arr = string.split('\n');
let cln = arr[i].replace(/(.*)(<\?.*\?>)(.*)/, "$1$3");
()
-代表一个“捕获组”(每行将分为三个捕获组)
(.*)
-第一组包含从头到尾的所有字符...
(...)
-第二个捕获组包含从<?
到?>
及其之间的所有字符(即PHP字符串)
(.*)
-第三组包含PHP字符串后的所有字符
$1 $2 $3
-三个捕获组的内容
因此,每行(由for循环处理)都分为这三个字符组。
在大多数行中,组2和3为空。第一组是整条线。因此,返回第1组和第3组将返回整行。
在包含PHP字符串的行上,PHP在捕获组2中(永远不会返回)。返回组1和组3要么返回一个空字符串,要么可能返回一些在PHP字符串之前或之后的空格。因此,我们还使用.trim()
删除了这些内容。如果删除了空格的行的长度为零,那么我们将不包括在新的(输出)数组中。
var htm = `<?php echo Hi Friends ?>
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript" src="js/loader.js" defer> </head>
<body>
<p>Hello</p>
<?php echo Hi Friend ?>
</body>
</html>`;
//console.log(htm);
var out=[], arr=htm.split('\n');
for ( var i=0; i<(arr.length); i++ ){
let cln = arr[i].replace(/(.*)(<\?.*\?>)(.*)/, "$1$3");
//console.log(cln + ' - ' + cln.trim().length);
if (cln.trim().length>0){
out.push(cln.trim());
}
}
console.log(out.join("\n") );
答案 1 :(得分:0)
我相信这对使用正则表达式和replace原型的用户将有效。关于字符串构造方式的一点说明,您将要替换用双引号引起来的引号(“),并用尖锐的符号(`)代替
string.replace(/\<\?php.*>/g,'');