我是编程新手,我正在解决这个问题。 我尝试过使用string.slice()的3个循环,但由于某种原因,它会打印一个空字符串。
请您解释我的代码中发生了什么,以及为什么它会输出错误的输出以及我如何纠正,而不是给我你正确答案的版本,以便我可以从错误中吸取教训。
测试输入
<p><strong><em>PHP Exercises</em></strong></p>
和输出应该是PHP练习
p.s这不是PHP练习,我并不困惑
这是我的代码:
function remove(answer){
var sen = answer.split("");
var arr = [];
for (var i = 0; i<answer.length; i++){
if (answer[i] == "<"){
for (var j = i; j<answer.length; j++){
if (answer[j] == ">"){
for (var k = j; k<answer.length; k++){
if (answer[k] == "<"){
return answer.slice(j+1, k);
}
}
}
}
}
}
}
答案 0 :(得分:5)
试试这个:
InvalidSenderError: Unauthorized sender
或者您可以使用string.js(string.js link):
function stripTags(data)
{
var tmpElement = document.createElement("div");
tmpElement.innerHTML = data;
return tmpElement.textContent || tmpElement.innerText || "";
}
var something = '<p><strong><em>PHP Exercises</em></strong></p>';
alert(stripTags(something));
var S = window.S;
var something = '<p><strong><em>PHP Exercises</em></strong></p>';
something = S(something).stripTags().s;
alert(something);
如果您正在尝试nodejs:
<script src="https://raw.githubusercontent.com/jprichardson/string.js/master/dist/string.min.js"></script>
答案 1 :(得分:1)
至于为什么提供的代码不起作用,代码在j = 2和k = 3时返回。我通过编写console.log(j,k)发现了这一点。在返回之前。这种见解清楚地表明代码正在识别第一组开放标记,而实际上您似乎想要识别开放和封闭的“em”标记。其他人提供的答案更加强大,但对代码的快速修复是:
变化
if (answer[i] == "<"){
到
if (answer.slice(i, i+3) == "<em"){
希望这有帮助!
答案 2 :(得分:-2)
您的代码未考虑... 没有。它只是在“&gt;”之间的第一次遭遇时停止和“&lt;”,在第一种情况下,没什么!你应该检查一个角色是否存在,如果不存在则继续。
老实说,这是教科书用来试图让你在盒子外思考的无用练习之一。但是你永远不会想要循环一个字符串来查找标签之间的文本。 JavaScript内置了很多方法,它实际上重新发明了轮子......就好像轮子真的是一个for循环。
如果你真的想避免使用正则表达式和其他内置函数,以便你可以学习解决问题的方法,那么首先尝试用括号切片!