正则表达式:如何在文本之间获取某些内容,但其他文本之间的内容除外
Regex: How to get something between text, except something between other text
好的,这是一种技巧。我有这段文字:
<something>
<h1> quoiwuqoiuwoi aoiuoisquiooi
<script> dsadsa dsa </script>
Some text here in the middle! =)
<script> dsadsa dsa </script>
</h1>
</something>
我只想获取没有标签的内容,换句话说:
<h1> quoiwuqoiuwoi aoiuoisquiooi
Some text here in the middle! =)
</h1>
包括标签。
通过一些研究我发现我可以使用以下正则表达式获取 h1 标签之间的所有内容:
/<h1([^]*)h1>/
但是,我找不到排除标签之间内容的方法。包括脚本标签本身。任何帮助将不胜感激。
如果有人想知道我为什么需要它,这里有一个简短的解释:
我正在使用此代码从使用 googleSpreadSheet 的网站抓取一些数据:
function doGet() {
var html = UrlFetchApp.fetch('https://www.nespresso.com/br/pt/product/maquina-de-cafe-espresso-pixie-clips-c60-preta-e-lima-neon-110v').getContentText();
var regExp = new RegExp("<h1([^]*)h1>", "gi");
var h1 = regExp.exec(html);
Logger.log(h1);
var doc = XmlService.parse(h1[0]);
var html = doc.getRootElement();
var menu = getElementsByClassName(html, 'nes_pdp-title nes_pdp-title-sep-none')[0];
var output = menu.getText();
Logger.log(output);
}
它在解析脚本标签和 iframe 时遇到了问题。我能找到的唯一解决方案是从中删除代码。如果谁有更好的解决办法,我洗耳恭听。
如果我不删除脚本和 iframe 标签,代码会在我调用 .getElementsByTagName 之前中断。当我使用 .XmlService() 时它中断了。如果 XmlSevive() 没有 javascript 或 iframe 标记,我只能将值传递给它。
再次感谢您!
尝试使用 String.prototype.replace()
将 h1
元素的 .innerHTML
替换为 RegExp
/<script>.*<\/script>/g
以匹配 script
标签,包括 [=17 中的文本=] 标签,.trim()
var h1 = document.getElementsByTagName("something")[0].querySelector("h1");
h1.innerHTML = h1.innerHTML.replace(/<script>.*<\/script>/g,"")
.trim();
console.log(h1.outerHTML)
<something>
<h1> quoiwuqoiuwoi aoiuoisquiooi
<script> dsadsa dsa </script>
Some text here in the middle! =)
<script> dsadsa dsa </script>
</h1>
</something>
好的,这是一种技巧。我有这段文字:
<something>
<h1> quoiwuqoiuwoi aoiuoisquiooi
<script> dsadsa dsa </script>
Some text here in the middle! =)
<script> dsadsa dsa </script>
</h1>
</something>
我只想获取没有标签的内容,换句话说:
<h1> quoiwuqoiuwoi aoiuoisquiooi
Some text here in the middle! =)
</h1>
包括标签。
通过一些研究我发现我可以使用以下正则表达式获取 h1 标签之间的所有内容:
/<h1([^]*)h1>/
但是,我找不到排除标签之间内容的方法。包括脚本标签本身。任何帮助将不胜感激。
如果有人想知道我为什么需要它,这里有一个简短的解释:
我正在使用此代码从使用 googleSpreadSheet 的网站抓取一些数据:
function doGet() {
var html = UrlFetchApp.fetch('https://www.nespresso.com/br/pt/product/maquina-de-cafe-espresso-pixie-clips-c60-preta-e-lima-neon-110v').getContentText();
var regExp = new RegExp("<h1([^]*)h1>", "gi");
var h1 = regExp.exec(html);
Logger.log(h1);
var doc = XmlService.parse(h1[0]);
var html = doc.getRootElement();
var menu = getElementsByClassName(html, 'nes_pdp-title nes_pdp-title-sep-none')[0];
var output = menu.getText();
Logger.log(output);
}
它在解析脚本标签和 iframe 时遇到了问题。我能找到的唯一解决方案是从中删除代码。如果谁有更好的解决办法,我洗耳恭听。
如果我不删除脚本和 iframe 标签,代码会在我调用 .getElementsByTagName 之前中断。当我使用 .XmlService() 时它中断了。如果 XmlSevive() 没有 javascript 或 iframe 标记,我只能将值传递给它。 再次感谢您!
尝试使用 String.prototype.replace()
将 h1
元素的 .innerHTML
替换为 RegExp
/<script>.*<\/script>/g
以匹配 script
标签,包括 [=17 中的文本=] 标签,.trim()
var h1 = document.getElementsByTagName("something")[0].querySelector("h1");
h1.innerHTML = h1.innerHTML.replace(/<script>.*<\/script>/g,"")
.trim();
console.log(h1.outerHTML)
<something>
<h1> quoiwuqoiuwoi aoiuoisquiooi
<script> dsadsa dsa </script>
Some text here in the middle! =)
<script> dsadsa dsa </script>
</h1>
</something>