Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript正则表达式替换未按预期工作_Javascript_Html_Xml_Regex - Fatal编程技术网

JavaScript正则表达式替换未按预期工作

JavaScript正则表达式替换未按预期工作,javascript,html,xml,regex,Javascript,Html,Xml,Regex,我无法通过javascript正则表达式替换清除一些html。 任务是从本地来源获取我的XBMC的电视列表。 URL是(保加利亚语)。 我正试图用刮板来获取数据-(归功于伊万·马尔科夫-) 不幸的是,自从上一次更新上述工具以来,tv listings页面发生了更改,所以我正在尝试让它正常工作。 问题是,当我试图从HTML解析XML时,它会中断。 我现在正试图通过正则表达式替换head和script标记来清理html。不幸的是,它不起作用。 这是我的替代者: function regexRepla

我无法通过javascript正则表达式替换清除一些html。 任务是从本地来源获取我的XBMC的电视列表。 URL是(保加利亚语)。 我正试图用刮板来获取数据-(归功于伊万·马尔科夫-) 不幸的是,自从上一次更新上述工具以来,tv listings页面发生了更改,所以我正在尝试让它正常工作。 问题是,当我试图从HTML解析XML时,它会中断。 我现在正试图通过正则表达式替换head和script标记来清理html。不幸的是,它不起作用。 这是我的替代者:

function regexReplace(pattern, value, replacer) 
{  
var regEx = new RegExp(pattern, "g");  
var result = value.replaceAll(regEx, replacer);  
if(result == null)  
return null;  
return result;  
}  
这是我的电话:

var htmlStringCluttered = HTML.getHTML(new URL(url), "WINDOWS-1251");  
log("Content grabbed (schedule for next 7 days)");  
log(url);  
var htmlString = regexReplace("<head>([\\s\\S]*?)<\/head>|<script([\\s\\S]*?)<\/script>", htmlStringCluttered, "");  
regexReplace的结果与原始结果完全相同。 由于XML无法解析,脚本无法读取元素。
有什么想法吗?

更新:

要将其转换为XMLDocument,可以执行以下操作:

var parseXml,
    xml,
    htmlStringCluttered = HTML.getHTML(new URL(url), "WINDOWS-1251"),
    htmlString = '';

if (typeof window.DOMParser != "undefined") {
    parseXml = function (xmlStr) {
        return (new window.DOMParser()).parseFromString(xmlStr, "text/xml");
    };
} else if (typeof window.ActiveXObject != "undefined" && new window.ActiveXObject("Microsoft.XMLDOM")) {
    parseXml = function (xmlStr) {
        var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(xmlStr);
        return xmlDoc;
    };
} else {
    throw new Error("No XML parser found");
}

console.log("Content grabbed (schedule for next 7 days)");
console.log(url);

//eliminate the '<head>' section
htmlString = htmlStringCluttered.replace(/(<head[\s\S]*<\/head>)/ig, '')

//eliminate any remaining '<script>' elements
htmlString = htmlString.replace(/(<script[\s\S]+?<\/script>)/ig, '');

//self-close '<img>' elements
htmlString = htmlString.replace(/<img([^>]*)>/g, '<img$1 />');

//self-close '<br>' elements
htmlString = htmlString.replace(/<br([^>]*)>/g, '<br$1 />');

//self-close '<input>' elements
htmlString = htmlString.replace(/<input([^>]*)>/g, '<input$1 />');

//replace '&nbsp;' entities with an actual non-breaking space
htmlString = htmlString.replace(/&nbsp;/g, String.fromCharCode(160));

//convert to XMLDocument
xml = parseXml(htmlString);

//log new XMLDocument as output
console.log(xml);

//log htmlString as output
console.log(htmlString);
而不是:

htmlStringCluttered = HTML.getHTML(new URL(url), "WINDOWS-1251"),
并在控制台中运行它

您还必须注释掉该行:

console.log(url);
或者声明
url
并给它一个值

原件:

您的RegExp需要做一些工作,当它被分解为两个
replace
语句时,它更简单(也更容易阅读):

var htmlStringCluttered = HTML.getHTML(new URL(url), "WINDOWS-1251"),
    htmlString = '';
console.log("Content grabbed (schedule for next 7 days)");
console.log(url);
//eliminate the '<head>' section
htmlString = htmlStringCluttered.replace(/(<head[\s\S]*<\/head>)/ig, '')
//eliminate any remaining '<script>' elements
htmlString = htmlString.replace(/(<script[\s\S]+?<\/script>)/ig, '');
//log remaining as output
console.log(htmlString);

好吧,我们都知道,所以让我们试着找出真正的问题是什么。为什么不能解析XML?你的限制是什么?事实上,不知道。js中的调用是var html=newxml(Utils.trim(htmlString.substring(39));//错误336551返回的是一个普通字符串。这是控制台输出(包括日志(html))-等等,你想完成什么?你想用什么语言来表达?这段代码中有些是Java,有些是JS,你想在其中完成什么?我知道。我正在试着让代码运行。它部分是java,部分是javascript。javascript解析html,java调用js,并将输出写入XMLTV格式的xml文件。问题是js没有正确解析html。谢谢。正则表达式的输出是绝对正确的。问题是它仍然不会被解析为xml,但我想这是一个完全不同的问题。@nnikolov06:更新了转换为XMLDocument的答案。谢谢!我对未关闭的标签有问题。它工作得很好。现在,我只是在td中独立的文本元素周围添加了一些div标记,这样我可以更轻松地进行迭代。非常感谢你的帮助!
console.log(url);
var htmlStringCluttered = HTML.getHTML(new URL(url), "WINDOWS-1251"),
    htmlString = '';
console.log("Content grabbed (schedule for next 7 days)");
console.log(url);
//eliminate the '<head>' section
htmlString = htmlStringCluttered.replace(/(<head[\s\S]*<\/head>)/ig, '')
//eliminate any remaining '<script>' elements
htmlString = htmlString.replace(/(<script[\s\S]+?<\/script>)/ig, '');
//log remaining as output
console.log(htmlString);
console.log(document.documentElement.innerHTML.replace(/(<head[\s\S]*<\/head>)/ig, '').replace(/(<script[\s\S]+?<\/script>)/ig, ''));
<html xmlns="http://www.w3.org/1999/xhtml">
    <body>
        ...
    </body>
</html>